资源描述:
《数据结构域算法设计-实验二 栈与队列操作的实现(实验代码及运行结果图)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、链栈#include#include#includetypedefstructSNode{intdata;structSNode*next;}SNode,*LinkList;intCreateList_S(LinkList&S,intn){//反向输入n个元素,建立带头结点的单链表Sinti;LinkListp;S=(LinkList)malloc(sizeof(SNode));S->next=NULL;//先建立一个带头结点的单链表printf("请输入相关
2、元素:");for(i=n;i>0;i--){p=(LinkList)malloc(sizeof(SNode));//生成新结点scanf("%d",&p->data);//输入元素p->next=S->next;//插入到表头S->next=p;//插入到表头}return0;}intPush(LinkList&S,intn)//元素入栈{inti;LinkListp=S,q=S;for(i=n;i>0;i--){p=(LinkList)malloc(sizeof(SNode));//生成新结点printf("
3、请输入元素:");//输入元素,一次只能输一个元素scanf("%d",&p->data);p->next=S->next;//插入到表头S->next=p;//插入到表头}printf("元素入栈成功!");printf("");//换行return0;}intPop(LinkList&S)//元素出栈{LinkListp;p=S;if(p->next==NULL)//判断是否为空栈{printf("该栈为空栈!");exit(0);}while(p->next!=NULL){p=p->next;print
4、f("%d",p->data);}p=S->next;S->next=NULL;free(p);return0;}voidmain(){intq;intt,i,cc;LinkListf;printf("请输入入栈元素的个数:");scanf("%d",&q);while(q<=0
5、
6、q>=10)//判断是否超出栈规定的元素个数{printf("你输入错误请重新输入:");scanf("%d",&q);}CreateList_S(f,q);do{printf("1、入栈2、出栈0、退出");cc=-1;//cc
7、只要不在0到2之间即可while(cc<0
8、
9、cc>3){printf("请选择0到2的操作:");scanf("%d",&cc);}switch(cc){case1:printf("请输入要入栈元素的个数:");scanf("%d",&t);while(t<0
10、
11、t>5){printf("你输入错误请重新输入:");scanf("%d",&t);}Push(f,t);break;case2:Pop(f);//出栈printf("");break;}}while(cc!=0);}顺序栈#include"s
12、tdio.h"#include"stdlib.h"#include"malloc.h"#defineOK1#defineOVERFLOW-1#defineERROR0#defineSTACK_INIT_SIZE10//存储空间初始分配量#defineSTACKINCREMENT2//存储空间分配增量typedefstruct{int*base;//在栈构造之前和销毁之后,base的值为NULLint*top;//栈顶指针intstacksize;//当前已分配的存储空间,以元素为单位}SqStack;intInitS
13、tack(SqStack&S){//构造一个空栈S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;}//InitStackvoidGetSqStack(SqStack&S,intn){inti;printf("请录入相关元素");for(i=0;i14、i]);S.top++;}}intPush(SqStack&S,inte){//插入元素e为新的栈顶元素inti;if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S