实验二栈的操作 数据结构系统上实验代码.docx
- 文档编号:25243583
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:27
- 大小:17.13KB
实验二栈的操作 数据结构系统上实验代码.docx
《实验二栈的操作 数据结构系统上实验代码.docx》由会员分享,可在线阅读,更多相关《实验二栈的操作 数据结构系统上实验代码.docx(27页珍藏版)》请在冰豆网上搜索。
实验二栈的操作数据结构系统上实验代码
#include
#include
#defineOK1
#defineERROR0
#defineElemTypeint
typedefstructLNode
{
intdata;
structLNode*next;
}LNode,*LinkList;
intCreateLink_L(LinkList&L,intn)
{
LinkListp,q;
inti;
ElemTypee;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=(LinkList)malloc(sizeof(LNode));
q=L;
for(i=0;i { scanf("%d",&e); p=(LinkList)malloc(sizeof(LNode)); p->data=e; p->next=q->next; q->next=p; q=q->next; } returnOK; } intLoadLink_L(LinkList&L) { LinkListp=L->next; if(! p) printf("TheListisEmpty! "); else while(p) { printf("%d",p->data); p=p->next; } printf("\n"); returnOK; } intinversion(LinkList&L) { LinkListp=L->next,q; L->next=NULL; while(p) { q=p->next; p->next=L->next; L->next=p; p=q; } returnOK; } intmain() { LinkListT; intn; scanf("%d",&n); CreateLink_L(T,n); printf("TheListis: "); LoadLink_L(T); inversion(T); printf("TheturnedListis: "); LoadLink_L(T); return0; } #include #include #include #defineOK1 #defineERROR0 #defineSTACK_INIT_SIZE100 #defineSTACKINCREMENT10 typedefintSElemType; typedefintStatus; structSqStack { SElemType*base; SElemType*top; intstacksize; }; StatusInitStack(SqStack&S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! S.base) returnERROR; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(S.base) returnERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } StatusGetTop(SqStackS,SElemType&e) { if(S.top==S.base) returnERROR; e=*(S.top-1); returnOK; } intStackLength(SqStackS) { inti=0; while(S.top! =S.base) { i++; S.top--; } returni; } StatusStackTraverse(SqStackS) { SElemType*p=(SElemType*)malloc(sizeof(SElemType)); p=S.top; if(S.top==S.base) printf("TheStackisEmpty! "); else { printf("TheStackis: "); p--; S.base--; while(p! =S.base) { printf("%d",*p); p--; } } printf("\n"); returnOK; } intmain() { inta; SqStackS; SElemTypex,e; if(InitStack(S)) printf("AStackHasCreated.\n"); while (1) { printf("1: Push\n2: Pop\n3: GettheTop\n4: ReturntheLengthoftheStack\n5: LoadtheStack\n0: Exit\nPleasechoose: \n"); scanf("%d",&a); switch(a) { case1: scanf("%d",&x); if(! Push(S,x)) printf("PushError! \n"); else printf("TheElement%disSuccessfullyPushed! \n",x); break; case2: if(! Pop(S,e)) printf("PopError! \n"); else printf("TheElement%disSuccessfullyPoped! \n",e); break; case3: if(! GetTop(S,e)) printf("GetTopError! \n"); else printf("TheTopElementis%d! \n",e); break; case4: printf("TheLengthoftheStackis%d! \n",StackLength(S)); break; case5: StackTraverse(S); break; case0: return1; } } } 222222222222222222222222222222222222222222222222222222222222222222222222222222 #include #include #defineERROR0 #defineOK1 #defineSTACK_INIT_SIZE100 #defineSTACKINCREMENT10 typedefintSElemType; typedefintStatus; structSqStack { SElemType*base; SElemType*top; intstacksize; }; StatusInitStack(SqStack&S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! S.base) returnERROR; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(S.base) returnERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } StatusStackEmpty(SqStack&S) { if(S.top==S.base) return0; else return1; } intmain() { intN,e; SqStackS; InitStack(S); scanf("%d",&N); while(N) { Push(S,N%8); N=N/8; } while(StackEmpty(S)) { Pop(S,e); printf("%d",e); } return0; } 333333333333333333333333333333333333333333333333333333333333333333333333333333 typedefcharSElemType; #include #include #include #include #defineOK1 #defineERROR0 #defineTRUE1 #defineFALSE0 typedefintStatus; #defineSTACK_INIT_SIZE10 #defineSTACKINCREMENT2 structSqStack { SElemType*base; SElemType*top; intstacksize; }; StatusInitStack(SqStack&S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! S.base) return0; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusStackEmpty(SqStackS) { if(S.top==S.base) returnTRUE; else returnFALSE; } StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(! S.base) return0; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } voidcheck() { SqStacks; SElemTypech[80],*p,e; if(InitStack(s)) { gets(ch); p=ch; while(*p) switch(*p) { case'(': case'[': Push(s,*p++); break; case')': case']': if(! StackEmpty(s)) { Pop(s,e); if(*p==')'&&e! ='('||*p==']'&&e! ='[') { printf("isn'tmatchedpairs\n"); return; } else { p++; break; } } else { printf("lackofleftparenthesis\n"); return; } default: p++; } if(StackEmpty(s)) printf("matching\n"); else printf("lackofrightparenthesis\n"); } } intmain() { check(); return1; } 444444444444444444444444444444444444444444444444444444444444444444444444444444 typedefcharSElemType; #include #include #include #include #defineOK1 #defineERROR0 #defineTRUE1 #defineFALSE0 typedefintStatus; #defineSTACK_INIT_SIZE10 #defineSTACKINCREMENT2 structSqStack { SElemType*base; SElemType*top; intstacksize; }; FILE*fp; StatusInitStack(SqStack&S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(! S.base) return0; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusStackEmpty(SqStackS) { if(S.top==S.base) returnTRUE; else returnFALSE; } StatusClearStack(SqStack&S) { S.top=S.base; returnOK; } StatusDestroyStack(SqStack&S) { free(S.base); S.base=NULL; S.top=NULL; S.stacksize=0; returnOK; } StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(! S.base) return0; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } StatusStackTraverse(SqStackS,Status(*visit)(SElemType)) { while(S.top>S.base) visit(*S.base++); printf("\n"); returnOK; } Statusvisit(SElemTypec) { printf("%c",c); returnOK; } voidLineEdit() { SqStacks; charch,c; intn,i; InitStack(s); scanf("%d",&n); ch=getchar(); for(i=1;i<=n;i++) { ch=getchar(); while(ch! ='\n') { switch(ch) { case'#': Pop(s,c); break; case'@': ClearStack(s); break; default: Push(s,ch); } ch=getchar(); } StackTraverse(s,visit); ClearStack(s); } DestroyStack(s); } intmain() { LineEdit(); return1; } 555555555555555555555555555555555555555555555555555555555555555555555555555555 #include #include #defineOK1 #defineERROR0 #defineSTACK_INIT_SIZE100 #defineSTACKINCREMENT10 typedefintStatus; structSqStack_T { char*base; char*top; intstacksize; }; structSqStack_N { int*base; int*top; intstacksize; }; StatusInitStack_T(SqStack_T&S) { S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char)); if(! S.base) returnERROR; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusInitStack_N(SqStack_N&S) { S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(! S.base) returnERROR; S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } intPush_T(SqStack_T&S,chare) { if(S.top-S.base>=S.stacksize) { S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char)); if(! S.base) returnERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } intPush_N(SqStack_N&S,inte) { if(S.top-S.base>=S.stacksize) { S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(! S.base) returnERROR; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; returnOK; } intPop_T(SqStack_T&S,char&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } intPop_N(SqStack_N&S,int&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } charGetTop_T(SqStack_TS) { chare; if(S.top==S.base) returnERROR; e=*(S.top-1); returne; } intGetTop_N(SqStack_NS) { inte; if(S.top==S.base) returnERROR; e=*(S.top-1); returne; } charPrecede(chartheta1,chartheta2) { inta,b; switch(theta1) { case'+': a=2;break; case'-': a=2;break; case'*': a=4;break; case'/': a=4;break; case'(': a=0;break; case'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二栈的操作 数据结构系统上实验代码 实验 操作 数据结构 系统 代码