版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华农数据结构上机实验答案
数据结构上机答案
1.1顺序线性表的基本操作
#include<stdio.h>
#include<malloc.h>
ftdefineOK1
#defineERROR0
#defineLIST_INIT_SIZE100
ttdefineLISTINCREMENT10
#defineElemTypeint
typedefstruct
(
int*elem,length,listsize;
)SqList;
intInitList_Sq(SqList&L)
(
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
L.length=0;
Llistsize=LIST_INIT_SIZE;
returnOK;
)
intLoad_Sq(SqList&L)
(
inti;
if(Llength=0)
printf(*TheListisempty!");
else
f
printf("TheListis:");
for(i=0;i<L.length;i++)
printf("%d*,L.elem[i]);
}
printf(*\n*);
returnOK;
}
intListInsert_Sq(SqList&L,inti,inte)
(
if(i<l||i>Llength+1)
returnERROR;
ElemType*newbase,*q,*p;
if(L.length>=L.listsize)
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*size
of(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-l]);
for(p=&(L.elem[Llength-1]);p>=q;-p)
*(p+l)=*p;
*q=e;
++L.length;
returnOK;
)
intListDelete_Sq(SqList&L,inti,int&e)
(
ElemType*q,*p;
if(i<l||i>L.length)
returnERROR;
p=&(LelemLi-U);
e=*p;
q=L.elem+L.length-1;
for(-H-p;p<=q;p++)
*(p-l)=*p;
L.length—;
returnOK;
)
intmainO
(
SqListT;
inta,i;
ElemTypee,x;
if(InitList_Sq(T))
("“
printf(*ASequenceListHasCreated.\n*);
)
while(1)
(
printf(*l:Insertelement\n2:Deleteelement\n3:Loadall
elements\nO:Exit\nPleasechoose:\n");
scanf&a);
switch(a)
case1:scanf("%d%d”,&i,&x);
if(!ListInsert_Sq(T,i,x))
printf(*InsertError!\n*);
else
printf(*TheElement%disSuccessfullyInserted!\n*,x);
break;
case2:scanf&i);
if(!ListDelete_Sq(T,i,e))
printf(*DeleteEiror!\n");
else
printf("TheElement%disSuccessfullyDeleted!\n*,e);
break;
case3:Load_Sq(T);
break;
case0:return1;
)
}
)
1.2合并顺序表
#include<stdio.h>
#include<malloc.h>
#defineOK1
#defineERROR0
#defineLIST_INIT_SIZE100
ftdefineLISTINCREMENT10
#defineElemTypeint
typedefstruct
(
int*elem,length,listsize;
}SqList;
intInitList_Sq(SqList&L)
(
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
Llength=0;
Llistsize=LIST_INIT_SIZE;
returnOK;
}
intLoad_Sq(SqList&L)
inti;
for(i=0:i<L.length:1++)
printf("%dL.elem[i]);
printf('\n");
returnOK;
)
intListLength(SqListL)
(
returnL.length;
)
intGetElem(SqListL,inti,ElemType&e)
(
e=L.elem[i-l];
returnOK;
)
intListInsert_Sq(SqList&L,inti,inte)
(
if(i<l||i>L.length+1)
returnERROR;
ElemType*p,*q,*newbase;
if(L.listsize<=L.length)
(
newbase=(ElemType*)realloc(L.elem,(Llistsize+LISTINCREMENT)*size
of(ElemType));
L.elem=newbase;
L.listsize+=LISTINCREMENT;
)
q=&(L.elem[i-l]);
for(p=&(L.elem[Llength-1]);p>=q;p)
*(p+l)=*p;
*q=e;
L.length++;
returnOK;
)
voidMergeList(SqListLa,SqListLb,SqList&Lc)
(
inti,j,k,La_len,Lb_len,ai,bj;
i=j=l;
k=0;
InitList_Sq(Lc);
La_len=ListLength(La):
Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len))
(
GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
(
ListInsert_Sq(Lc,++k,ai);
i++;
)
else
{
ListInsert_Sq(Lc,++k,bj);
j++;
)
}
while(i<=La_len)
(
GetElem(La,i++,ai);
ListInsert_Sq(Lc,++k,ai);
}
while(j<=Lb」en)
{
GetElem(Lb,j++,bj);
ListInsert_Sq(Lc,++k,bj);
)
Load_Sq(Lc);
)
intmainO
(
intan,bn,i,e;
SqListLa,Lb,Lc;
InitList_Sq(La);
scanf&an);
for(i=l;i<=an;i++)
(
scanffee);
ListInsert_Sq(La,i,e);
)
printfCListA:*);
Load_Sq(La);
InitList_Sq(Lb);
scanf("%d”,&bn):
for(i=l;i<=an;i++)
scanf("象T,fee);
ListInsert_Sq(Lb,i,e);
)
printf(*ListB:");
Load_Sq(Lb);
printf(*ListC:");
MergeList(La,Lb,Lc);
return0;
)
1.3顺序表逆置
#include<stdio.h>
#include<malloc.h>
#defineOK1
#defineERROR0
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
#defineElemTypeint
typedefstruct
(
int*elem,length,listsize;
)SqList;
intInitList_Sq(SqList&L)
(
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)):
if(!L.elem)
(
printf("N01”);
returnERROR;
)
Llength=0:
L.listsize=LIST_INIT_SIZE;
returnOK;
}
intLoad_Sq(SqList&L)
inti;
if(!Llength)
printfCThisListisempty!\n");
returnERROR;
)
else
(
for(i=0;i<L.length;i++)
printf("%d*,Lelem[i]);
)
printf("\n");
returnOK;
)
intListInsert_Sq(SqList&L,inti,inte)
(
ElemType*newbase,*p,*q;
if(L.length>=L.listsize)
(
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*size
of(ElemType));
if(!newbase)
(
printf("N02”);
returnERROR;
)
L.elem=newbase;
L.listsize+=LISTINCREMENT;
)
q=&(L.elemTi-ll):
for(p=&(L.elem[L.length-1]);p>=q;p—)
*(p+l)=*p;
*q=e;
L.length++;
returnOK;
)
intswap(SqList&L,intn)
(
inti,j,te叩;
for(i=0,j=n-l;j>i;iH,j-)
{
temp=L.elem[i];
L.elem[i]=L.elen:[j];
L.elem[j]=temp:
)
returnOK;
)
intmainO
(
SqListT;
intn,i;
ElemTypex;
scanf&n);
InitList_Sq(T);
for(i=l;i<n+l;i++)
(
scanf&x);
ListInsert_Sq(T,i,x);
)
printfCTheListis:*);
Load_Sq(T);
swap(T,n);
printf(""TheturnedListis:");
Load_Sq(T);
return0;
)
1.4链式线性表的基本操作
#include<stdio.h>
#include<malloc.h>
#defineERROR0
ttdftfinAOK1
ftdefineElemTypeint
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<n;i++)
{
scanf&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
(
printf(*TheLinkListis:");
while(p)
(
printf("%d”,p->data);
p=p->next;
)
)
printf("\n"):
returnOK;
)
intLinkInsert_L(LinkList&L,inti,ElemTypee)
(
LNode*p=L,*s;
intj=0;
while(p&&j<il)
(
p=p>next;
j++;
)
if(!p||j>i-l)
returnERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
returnOK;
)
intLinkDelete_L(LinkList&L,inti,ElemType&e)
(
LNode*p=L,*q;
intj=0;
while(p->next&&j<i-l)
(
p=p->next;
j++;
}
if(!(p->next)||j<i-l)
returnERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
returnOK;
)
intmainO
(
LinkListT;
inta,n,i;
ElemTypex.e:
printfCPleaseinputtheinitsizeofthelinklist:\n*);
scanf&n);
printf("Pleaseinputthe%delementofthelinklist:\n*,n);
if(CreateLink_L(T,n))
(
printf(*ALinkListHasCreated.\n^);
LoadLink_L(T);
)
while(1)
(
printfCl:Insertelement\n2:Deleteelement\n3:Loadall
elements\nO:Exit\nPleasechoose:\n");
scanf&a);
switch(a)
case1:scanf("%d%d”,&i,&x);
if(!LinkInsert_L(T,i,x))
printf(*InsertError!\n*);
else
printf(*TheElement%disSuccessfullyInserted!\n*,x);
break;
case2:scanf&i);
if(!LinkDelete_L(T,i,e))
printf(*DeleteEiror!\n");
else
printf(*TheElement%disSuccessfullyDeleted!\n*,e);
break;
case3:Lx)adLink_L(T);
break;
case0:return1;
)
}
)
1.5合并链表
#include<stdio.h>
#include<malloc.h>
#defineERROR0
#defineOK1
ftdefineElemTypeint
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<n;i++)
scanf&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(1p)
printfC*TheListisempty!*);
else
{
while(p)
{
printf("%d”,p->data);
p=p->next;
)
)
printfC\n*);
returnOK;
)
voidMergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc)
(
LinkListpa,pb,pc:
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(paMpb)
(
if(pa->data<=pb->data)
(
pc->next=pa;
pc=pa;
pa=pa>next;
)
else
pc->next=pb;
pc=pb:
pb=pb->next;
)
}
pc->next=pa?pa:pb;
free(Lb);
)
intmainO
(
LinkListLa,Lb,Lc;
intn;
scanf&n);
CreateLink_L(La,n);
printf("ListA:");
LoadLink_L(La);
scanf&n);
CreateLink_L(Lb,n);
printf("ListB:*);
LoadLink_L(Lb);
MergeList_L(La,Lb,Lc);
printfCListC:");
LoadLink_L(Lc);
return0;
}
1.6线性链表逆置
#include<stdio.h>
#include<malloc.h>
ttdpfinROK1
#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<n;i++)
(
scanffee);
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;
)
printfC\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;
)
2.1顺序栈的基本操作
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
ftdefineOK1
ftdefineERROR0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefintSElemType;
typedefintStatus;
structSqStack
(
SElemType*base;
SElemType*top;
intstacksize;
);
StatusInitStack(SqStack&S)
(
S.base=(SElemType*)nalloc(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)*si
zeof(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(SElemlype));
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;
)
intmainO
(
inta;
SqStackS;
SElemTypex,e;
if(InitStack(S))
printf(*AStackHasCreated.\n*);
while(l)
(
printf(*1:Push\n2:Pop\n3:GettheTop\n4:ReturntheLengthofthe
Stack\n5:LoadtheStack\nO:Exit\nPleasechoose:\n*);
scanf&a);
switch(a)
(
case1:scanf&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(!GetTcp(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;
)
}
}
2.2循环队列的基本操作
#include<stdio.h>
#include<malloc.h>
ftdefineOK1
#defineERROR0
typedefintStatus;
typedefintQElemType;
#defineMAXQSIZE100
typedefstruct
(
QElemType*base;
intfront;
intrear;
}SqQueue:
StatusInitQueue(SqQueue&Q)
(
Q.base=(QElemType*)nalloc(MAXQSIZE*sizeof(QElemType));
if(!Q.base)
returnERROR;
Q.front=Q.rear=0;
returnOK;
}
StatusEnQueue(SqQueue&Q,QElemTypee)
(
if((Q.rear+l)%MAXQSIZE=Q.front)
returnERROR;
Q.baseTQ.rearl=e;
Q.rear=(Q.rear+l)%MAXQSIZE;
returnOK;
)
StatusDeQueue(SqQueue&Q,QElemType&e)
(
if(Q.front=Q.rear)
returnERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
returnOK;
)
StatusGetHead(SqQueueQ,QElemType&e)
(
if(Q.front=Q.rear)
returnERROR;
e=Q.base[Q.front];
returnOK;
)
intQueueLength(SqQueueQ)
(
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
)
StatusQueueTraverse(SqQueueQ)
(
inti:
i=Q.front;
if(Q.front=Q.rear)
printfCTheQueueisEmpty!");
else
(
printf(*TheQueueis:");
while(i!=Q.rear)
(
printfC%d*,Q.base[i]);
i=i+l;
)
)
printf('\n");
returnOK;
)
intmain()
(
inta;
SqQueueS;
QElemTypex,e;
if(InitQueue(S))
printf(*AQueueHasCreated.\n");
while(1)
(
printf(*1:Enter\n2:Delete\n3:GettheFront\n4:Returnthe
LengthoftheQueue\n5:LoadtheQueue\nO:Exit\nPleasechoose:\n");
scanf&a);
switch(a)
(
case1:scanf&x);
if(!EnQueue(S,x))
printf(*EnterError!\n");
else
printf("TheElement%disSuccessfullyEntered!\n",x);
break;
case2:if(!DeQueue(S,e))
printf("DeleteError!\n*);
else
printf(*TheElement%disSuccessfullyDeleted!\n*,e);
break;
case3:if(!GetHead(S,e))
printf(*GetHeadError!\n*);
else
printf("TheHeadoftheQueueis%d!\n*,e);
break;
case4:printf(*TheLengthoftheQueue
is!\n”,QueueLength(S));
break;
case5:QueueTraverse(S);
break;
case0:return1;
)
}
)
2.3栈的应用一进制转换
#include<stdio.h>
#includfi<mal1oc.h>
#defineERROR0
#defineOK1
#defineSTACK」NIT_SIZE100
#defineSTACKINCREMENT10
typedefintSElemType;
typedefintStatus;
structSqStack
(
SElemType*base;
SElemType*top;
intstacksize;
);
StatusInitStack(SqStack&S)
(
S.base=(SElemType*)iialloc(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)*si
zeof(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;
)
intmainO
(
intN,e;
SqStackS;
InitStack(S);
scanf&N);
while(N)
(
Push(S,N%8);
N=N/8;
}
while(StackEmpty(S))
(
Pop(S,e);
printf("%d”,e);
)
return0;
}
2.4括号匹配检验
typedefcharSElemType;
#include<malloc.h>
#include<stdio.h>
#include<math.h>
#include<process.h>
^defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
typedefintStatus;
#defineSTACK_INIT_SIZE10
#defineSTACKINCREMENT2
structSqStack
(
SElemType*base;
SElemType*top;
intstacksize;
);
StatusInitStack(SqStack&S)
(
S.base=(SElemType*)nalloc(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)*si
zeof(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);
(
printf("isn'tmatchedpairs\n*);
return:
)
else
(
P++;
break;
)
}
else
(
printfClackofleftparenthesis\n*);
return;
)
default:p++;
}
if(StackEmpty(s))
printf("matching\n");
else
printf(*lackofrightparenthesis\n*);
}
}
intmainO
(
check();
return1;
)
2.5行编辑程序
typedefcharSElemType;
#include<malloc.h>
#include<stdio.h>
#include<math.h>
#include<process.h>
tfdefineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
typedefintStatus;
#defineSTACK_INIT_SIZE10
#defineSTACKINCREMENT2
structSqStack
(
SElemType*base:
SElemType*top;
intstacksize;
J;
FILE*fp;
StatusInitStack(SqStack&S)
(
S.base=(SElemType*)iialloc(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)*si
zeof(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)
(
printfc);
returnOK;
)
voidLineEdit()
(
SqStacks;
charch,c;
intn,i;
InitStack(s);
scanf&n);
ch=getchar();
for(i=l;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);
)
intmainO
(
LineEditO;
return1;
)
2.6表达式求值
#include<stdio.h>
#include<malloc.h>
#defineOK1
ftdefineERROR0
ftdefineSTACK_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(i
nt));
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(charthetal,chartheta2)
(
inta,b;
switch(thetal)
(
case'+':a=2;break;
case'-':a=2;break;
case':a=4;break;
casea=4;break;
casea=0;break;
casea=6;break:
case=:a=~l;break;
)
switch(theta2)
case'+':b=l;break;
case':b=l:break:
case'*':b=3;break;
case'I':b=3;break;
case'C:b=6;break;
case')':b=0;break;
case'=':b="l;break;
)
if(a<b)
return'<';
else
if(a=b)
return'=';
else
return'>';
}
charprecede(chare,charc)
(
if(c='+'||c='-')
(
if(e=,+'||e=:||e=)||e=~)
return'>';
else
return';
}
if(c='*'II'/')
(
if(e=C)
return'〈';
else
return'>';
)
if(c=C)
(
if(e二))一
return,=';
else
return'<';
)
if-)
return'>';
if(c='=')
if(e='=,)
return=:
else
return'<';
intIn(charc)
if(c〉='O'&&c<=9')
return1;
else
return0;
intOperate(inta,chartheta,intb)
(
ints;
switch(theta)
(
cases=a+b;break;
case'一':s=a-b;break;
cases=a*b;break;
case'I':
if(b!=O)
s=a/b;
else
printfC*Inputerror*);
break;
returns
intmain()
intk=0,m,y,a,b;
SqStack_TOPTR;
SqStack_NOPND;
charc,theta;
InitStack_T(OPTR);Push_T(OPTR,J=);
InitStack_N(OPND);c=getchar();
while(c!==||GetTop_T(OPTR)!='=')
if(In(c))
m=c'0':
if(k=l)
Pop_N(OPND,y);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地下室外墙后浇带施工设计方案
- 钢结构大棚施工技术方案
- 金融科技对个人隐私保护的作用评估
- 安徽省江淮名校联盟2026届高三下学期三月联考历史试题(含答案) - 原卷版
- 寒武纪25Q4存货大幅增加供应链稳步改善
- 第3章 小程序端基础架构与工程化配置
- 浅析我国事业单位内部审计业务外包的必要性-以A交通管理站为例
- 四川省达州市万源中学2024-2025学年高二下学期6月月考试题 物理 含答案
- 2026年高考地理新课标一卷考试题库附参考答案
- 2023高考百日冲刺誓师大会演讲稿(24篇)
- 高等职业学校学前教育专业实训教学条件建设标准
- 外科学-第三十六章-阑尾疾病
- 化疗药物外渗预防及处理-中华护理学会团体标准课件
- 供暖公司维修工管理制度
- DB6101-T 3170-2023 植物铭牌设置规范
- 《赤松茸纯稻草简易栽培技术规程》编制说明
- 松江区职业教育集团化办学的历史演变及现状分析
- 2018风力发电场并网验收规范
- 锅炉房设备安装施工组织设计d
- 婴幼儿脑科学-幼儿教育-课件
- 飞致云CloudExplorer产品白皮书
评论
0/150
提交评论