数据结构顺序栈实验报告x

一、 设计人员相关信息

设计者姓名、学号和班号:12地信李晓婧12012242983

设计日期:2014.

上机环境:VC++6.0

二、 程序设计相关信息

实验题目:编写一个程序,实现顺序栈(假设栈中元素类型为 char)的各种

基本运算,并在此基础上设计一个程序,完成如下功能:

(1) 初始化栈

(2) 判断栈是否为空

(3) 依次进栈元素a,b,c,d,e

(4) 判断栈是否为空

(5) 输出栈长度

(6) 输出从栈顶到栈底元素

(7) 输出出栈序列

(8) 判断栈是否为空

(9) 释放栈

实验项目组成:栈的初始化、销毁、判断是否为空、进栈、出栈、取栈顶元 素。

实验项目的程序结构(程序中的函数调用关系图):

实验项目包含的各个文件中的函数的功能描述:

初始化栈InitStack:建立一个新的空栈,实际上将栈顶指针指向-1即可。

销毁栈DestroyStack:释放栈占用的存储空间

判断栈是否为空 StackEmpty:栈为空的条件是s->op==-1。

进栈Push:在栈不满的条件下,先将栈顶指针增 1,然后在栈顶指针指向 位置插入元素 e。

出栈Pop:在栈不为空的条件下,先将栈顶元素赋给e,然后将栈顶指针减

1.

取栈顶元素GetTop:在栈不为空的条件下,将栈顶元素赋给 e。

算法描述或流程图:

#include "stdio.h"

#include "malloc.h"

#include<stdlib.h>

#define MaxSize 50

typedef char ElemType;

typedef struct

{ElemType data[MaxSize];

int top; /* 栈顶指针 */

}SqStack; //定义顺序栈类型

void InitStack(SqStack*&s)/* 初始化 */

{

s=(SqStack*)malloc(sizeof(SqStack));

s->top=-1; //栈顶指针置为 -1

}

void DestroyStack(SqStack *&s)/* 销毁 */

{

free(s);

}

int StackEmpty(SqStack*s)/*判断是否为空 */

{

return(s->top==-1);

}

int push(SqStack *&s,ElemType a[],int n)

{

int i;

if(s->top==MaxSize-1) //栈满的情况,即栈上溢出

return 0;

for(i=0;i<n;i++)

{

s->top++;

//栈顶指针增 1

s->data[s->top]=a[i]; //元素e放在栈顶指针处

}

return 1;

}

int Pop(SqStack*&s,ElemType &e)/*出栈一个元素 */

{

if(s->top==-1)

return 0;

//栈为空的情况,即栈下溢出

e=s->data[s->top];

//取栈顶元素

s->top--;

return 1;

//栈顶指针减 1

}

int GetTop(SqStack *s,ElemType &e)/*取栈顶元素 */

{

if(s->top==-1) //栈为空的情况,即栈下溢出

return 0;

e=s->data[s->top]; //取栈顶元素

return 1;

}

int StackLength(SqStack *s)/*求栈长度 */

{

return(s->top+1);

}

void DispStack(SqStack *s)

{

int i;

for(i=s->top;i>=0;i--)

printf("%c",s->data[i]);

printf("\n");

}

void main()

{

int i,j;

ElemType str[5]={'a','b','c','d','e'}; //定义字符数组

SqStack *st; //定义栈

Ini tStack(st);/* 初始化 */

i=StackEmpty(st); //判断栈是否为空

if(i==0)

printf("顺序栈非空\n");

else

printf("顺序栈为空\n"); push(st,str,5); 〃进栈 j=StackEmpty(st);

if(j==0)

printf("顺序栈非空\n");

else

printf("顺序栈为空\n");

printf("栈长度为:%d\n",StackLength(st)); 〃输出栈长度

printf("出栈序列:\n");

DispStack(st); 〃输出栈

StackEmpty(st);

DestroyStack(st);

}

实验数据和实验结果:

环 *1:\83\3-1 调贰完^\DebuE\3-l. eze

an

an

出现的问题及解决方案:

3M Jtpp [::Vd口匚unc-nt &cAdQcuiwnts ciV^ocunents c !\dacijn>enit5c :^i1i]ieijiki

3M Jtpp [::Vd口匚unc-nt &cAdQcuiwnts ciV^ocunents c !\dacijn>enit5

c :^i1i]ieijikihiiIs!jnti ^etting^^diinini^trdil■叫呆面\83\3-1^3- 1 上pp(21) 2 cAiiacunpnts and 5ettiiniq5\idiniHi5tr9twr\# E\S3\b-iYS-19epp(M) ; error

jnd S'i?ttime's%Adniniix tr Jit nr\^ 面*航自-iW"?rpp#) : rrrnr C21^6 : sj|rit am w叶:“::曇:凹 ; !b^Forr idf-nti-Firr !rlrH'!

日nd s ettin^sX sJninistrator^M 面'阴血):error 'l:l?i*iype 1s nissing stcragre-class or type spec-ifiers

and settings\adliiinistrat(&]tB3\3-1X3-1 >icppCfi) : error C巧M: ' i Filming storage-class or typ? spfciiFl?rs

and s&ttingE^adninistraitorX桌面*叭」斗\:3M wpp口砂 :error E2562 : 1StackCfipt^"i 5odtT function returning a value

-Srr difr] jr jL i>u>n n-F uSl.diLl<Enfity !

. … …_ C?&61; s^ntai? errur ; identifier ,[Elpnfnpe,

c:Vi9ocun>ents and settings\aiJiiinistt1 ator'k桌面XU肌3-1\3T ?icppt:3*Ji : prror C293¥: 'flats': is not n nenber of ■SqStack,1 cz'VdDcuneints: and 5ettings'XaAninistiratbfX^;E\B3\3-1\3 1 .cpp(ti) : see declaration of '^qStack'

rmOtf-

prrg#~

errosr

:trror

diid settingi.\didninis trdtar面*2\2-1\詮亠亡艸阳 1、: jrifl sPttinq*;%arlRini^ fc-fr~3tnr\W ?\ftS\3-Brpp:

C空 IMG ± ufhdiecl^rrd ideiitifier

: sj|n4-JX prriir;mi ssi ng ■*:;1 口「?'} k

CZW1: s^ntaw error ; identifier 'EleinType'_ . ”尸一 - ^ …_ 既的耶暑'data': is net a n&raber of 'SqStacIc'

£ ^doiciiiKinits settings'X.adni.ni£trator\桌面、時垃-”吕?仁亡ppk) s see dec Lara tiom>af "SqStacf

c : \.d口匚UFK'iir# Jind s i^t.iiiniHis tr.it . Epp44) : error £?AA i : s/ntax error : identi-Firr ! E]rnTy|ic'

cAdocuments: ard settincisXaaniniistrat-or^jft面X阴密-1V3T?icp|j(翱』iFrror U2B37; 'Sats'; is net a nerWpr of b5q5taclt*

c :\>flaciJM!<nt5 and settings^atfninistrj't 叶\桌血、時?upp(<i>: see <lecLarati(]>n> of 'SqStach:'

1El^nTsJpe": iundeclarf'd id聲ntf“肝 s-j|ntdix ffinrnr znis-siiig ■* * br-F口「■ idlrniti-Firt"?'r8

1str- ; undecl^reif iiJentifier subscript requir电亏 array or pointe『typw 豹nt曲

SJFlitaK syntax syntax 'iB ± Gii'dieelaired IdeiitiFlei-

>£ :^da£ulrH!nt&

£ ;\.dl口EZUlWItM

c:\dQCunents 测d settin<|sXaitfninistrator^^E\83\3-1X3-1 -cppCS^): c :\d@cuin>er>ts:

and 5e-ttingsVadninistrat桌前叭3-1\3-1 .Epp(39)

and jirid ? nd and and jud jind and and arid

'H-!^

settim^^Xaidninis 面*叽空-T\拱 1.epp(6e)

s ift diiini His trat 叶\堂面 \ 93^3-1X3-1 _£|ip(fifi)

settiniqs% ?dniini5trato(r\*t 面\W3\3-1\3:-19cpp(dn) settings\aidninistratorX:T[kj^B3\3-1\3-1 .cppC^O settings^adninistrator\*面讪叭SI-1\3 D ?tpp価町 £ 讹 tin 护 \ didnini^ trait ar\i jg \ ?3\3-1\3-1 _izp|j(A6) settiniqs^ sflni nistrst 叶\皐 E _ upp W 町

settings% adninistratorXS. E\83\3-1\3-1. cpp ID settings\adninlstratoir\ijEjX.B3X3-1\3 1 -cppidft) settings% adRlnis tr 贰叶\桌面 \93\3-1\3-1 .epp(6fl)

>c sVdacdr^nts:l:\d口iciJFirdl:亠 g Adigcuupnts c ^documents c sVdocunents

>c :^.d口t:!unelbt?

£ ;\d口Buinnrtt生

czkdocunents c:\d@cunents

l z^dacufiehts.

廿注匚I - iP X r

]]\粗播?菌昼、挂文井1中垂找 \ 在文件沖香找I结里\ 沁1|小必叮闊/

error rrrur error error error rrrdr pri'^r error error frrfli-

C2IH52

C21W :

C21 W: C2D59:

C211W :

G21i^;

C21Uie:

C2IK9:

error : a{1

errar i iii&S-iing 4;'bef 口!{ *■

error ; qissiniq 4:;' b^f-orp 1) ?■

error : prissiRg ?:'before idientifier 'Fusli'error : a1'

I l^uoid^XtackEiiipti/(SqStack*s)/*判断是否为空*/

■ return(s->top-■-1);

int Push(^qStack?£i£jElemT^pB Q)#*{住栈元爭

{

if(s->top==Haxs±ze-l)

return &;

s=>top**;

s->diata[s->top]=e;

return 1

}

int Popf SqStack*8rS pElenType 陆)/*出栈一卜元素和

<

if(s->t0p-*-1)

return 0;

e-s->data[s->top];

5=>top^-;

return 1;

|sAfidlivLni£;t:r^tDF\杲面\$%\色-11\^一1 .£pp(3g):启F『or C2O30: 'clatz11: iis not 詡 oionbor o£ "£q£tgck!Figuration: 3-1 - Win32 Debug d Settings\fidnini5traEor\^0S83X3^1\3-1 r

|sAfidlivLni£;t:r^tDF\杲面\$%\色-11\^一1 .£pp(3g):启F『or C2O30: 'clatz11: iis not 詡 oionbor o£ "£q£tgck!

Ariliii mist-rflfrnrA^-: prrnr R?fill9 : 1 rlafa 1: i ■; nnlb a uipnhpr nF a S.nSi-^r:lk

*/typedef s {ElenType^elenl^ax^ize]; int top;/*

*/

}SqStdck;

解决方案: ⑴添加typedef char ElemType;

return(s->top==-1);

typedef struct <ELen)rjjpe ;

}Sq£tdch;

三、程序盘

提交的程序盘应包含全部的源程序清单和可执行文件。