1、 /存储空间分配增量typedef struct int *base; /在构造之前和销毁之后,base的值为NULL int *top; /栈顶指针 int stacksize; /当前已分配的存储空间,以元素为单位SqStack;void InitStack(SqStack &S) /构造一个空栈S S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int); if(!S.base) exit(0); /存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; /cout初始化完毕endl;/InitStack
2、void GetTop(SqStack S,int &e) /若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if(S.top=S.base) cout此栈为空! e=*(S.top-1); coute/ coutS.stacksize)/栈满,追加存储空间 S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);新分配空间失败! S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; *S.top+=e;插入元素成功/Push
3、void Pop(SqStack &S,int & /若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK; if(S.base=S.top)此栈为空栈,无法删除! e=*-S.top;删除成功!/Popvoid ClearStack(SqStack & /把S置为空栈 coutn; Stack.stacksize=n; do请选择操作: 1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出m; switch(m) case 1: 请输入进栈值: cinz; if(i=Stack.stacksize) coutSorry!endl栈溢出!此程序将退出! exit(0); Push(Sta
4、ck,z); i+; break; case 2: Pop(Stack,x);x出栈 case 3:栈顶值为: GetTop(Stack,y); case 4: ClearStack(Stack); case 5:Exit! default:输入错误!此程序将退出! /switch while(m!=5); getch();2. #include /链式栈typedef struct Stack Stack *next; int data;Stack,*SLink; SLink top; int length; /构造一个空栈 S.top=NULL; /设栈顶指针的初值为空 S.length=
5、0; /空栈中元素个数为 /在栈顶之上插入元素 e 为新的栈顶元素 SLink p; p=new Stack; /建新的结点 p-data=e;next=S.top; S.top=p; +S.length; /若栈不空,则删除S的栈顶元素,用e返回其值S.top)此栈为空栈! e=S.top-data; S.top=S.top-next;void GetTop(SqStack & /若栈不空,取栈顶元素,用e返回其值此栈为空栈! / /需改正! if(i=n)/队空、入队和出队int n=0;typedef struct Q Q *next;Q,*QLink;void InitQ(QLink
6、&q) /构造一个队列 q-next=q;/InitQvoid Push(QLink &q,int & /入队 QLink p; p=new Q;next=q-next=p; n+;void OutQ(QLink & /出队 QLink t; t=new Q; p=q; int i; for(i=0;inext-data=e) t=p- p-next=t- delete t; break; /if p=p- /for if(i=(n+1)您所输入的值不存在!/OutQvoid ClearQ(QLink & /置队空 q=q-/ClearQvoid checkQ(QLink & /查看队尾元素
7、if(q-next=q)此队列为空!程序将退出! e=q-/check int m,x,n,y; QLink Qu; Qu=new Q; InitQ(Qu); 1,入队 2,出队 3,查看队尾元素 4,清空队列 5,退出 x; switch(x)请输入您想插入的值:t; Push(Qu,m);请输入您想出队的值: OutQ(Qu,n);n出队 checkQ(Qu,y);队尾元素为:ystringusing namespace std;bool comp(char x,char y) if(x=y) return true; else return false;/comp char str100
8、;请输入字符串:str; int i=0,m; while(stri) m=i%2; if(m) int p=i-1,q=0; int j; for(j=0;j(i-1)/2;j+) if(!comp(strq+,strp-) break; /for if(j=(i-1)/2)此字符串对称! else此字符串不对称! /if else(i/2); if(j=i/2) /else五、运行结果1.六、实验体会栈和队列是数据结构里面很重要的两种特殊线性结构,它们的操作不同于线性表,其运算(插入和删除)是受限制的。栈的所有插入和删除操作都限制在表的同一端进行,其最先插入的元素被压在栈的底部,要到所有后插入的元素全部被删除后才能删除。记住了原理,程序就好办了。教师评价优良中及格不及格教师签名日期
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1