1、对于每一个节点都有data和next域来存储数据和指向下一个节点,所以进行这种节点定义。typedef struct QNode int data;QNode *next;QNode,*QPtr;typedef struct Qlink QPtr front; QPtr rear;Qlink;3.算法设计系统规定的功能设计的算法有:置空栈、判栈空、进栈、出栈、读栈顶、输出栈、判栈满1)初始化和建立顺序栈S1:定义数据结构类型 char *base; char *top; int stacksize; Sq/定义结构体,其中包含栈顶、栈尾指针和存储空间S2:初始化这个顺序栈int InitSq(
2、Sq&S) S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(Sq); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; /申请存储空间,并且将栈顶栈尾元素指在一个位置,构造空栈S3:从键盘输入一串字符,根据这些字符构造顺序栈Sq create(Sq & InitSq(S); printf(请输入你的栈); char str100; gets(str);/得到字符 int n=strlen(str); for(int i=0;i=S.stack
3、size) S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char);S.base) exit (OVERFLOW); S.top=S.base+S.stacksize;/调整指针 S.stacksize+=STACKINCREMENT;/增大空间 *S.top+=e; 5)出栈编写子函数GetTop,使其可以得到栈顶元素,从而确定要删去的元素是什么,并且返回这个元素int GetTop(Sq S,char &e) if(S.top=S.base) return ERROR; e=*(S.top-1); ret
4、urn e;编写子函数Pop,删除栈顶元素int Pop(Sq& if(S.top=S.base)return ERROR; e=*-S.top;编写子函数Print,让这个函数可以输出栈里每一个元素来输出出栈后的栈里元素int Print(Sq S) char *p,*q; p=S.top; q=S.base; if(p=q) return ERROR; while(p!=q) printf(%cn,*(p-1); p-;6)读栈顶调用函数GetTop,读到栈顶元素,并且输出这个元素GetTop(S,a);,a)7)输出栈调用函数Print,输出栈里每一个元素8)判栈满编写函数T,使其可以实
5、现判栈满功能int T(Sq S) =S.stacksize) else return ERROR;根据返回值,确定输出内容if(T(S)printf(YnNn9)选择功能弹出提示,得到键盘处根据提示所输入的字符选择你想要的功能n1置空栈n2判断栈空n3进栈n4出栈n5读栈顶n6输出栈n7判栈满n%dm);用switch分析得到的m,根据不同的m进入不同的case,调用不同的函数switch(m) case 1:Clear(S);break; case 2:if(Empty(S) printf( else printf( break; case 3: Push(S,x);Print(S); c
6、ase 4:Pop(S,a); case 5:,a); case 6: case 7: 置空栈、判栈空、进栈、出栈、读栈顶1)定义节点,初始化链栈,创建链栈定义节点 struct node *next;/节点的定义S2:初始化链栈int Init(node* &h) h-next=NULL;/建立一个空栈编写子函数Set,使其根据键盘端的输入,创建链栈int Set(node* & int i; char str100; gets(str);/得到字符串 int n=strlen(str); for(i=0;i+)Push(h,stri);/将每一个字符入栈2)置空栈int Clear(nod
7、e* &在主函数里调用Clear子函数,就能达到置空栈的功能int Empty(node* & if(h-next=NULL) else return FALSE;if(Empty(h) printf( int Push(node* &h,char x) node *s; s=(node*)malloc(sizeof(node); s-data=x;next=h; h=s;int Pop(node* & char x; x=h-data; node *p; p=(node*)malloc(sizeof(node); p=h; h=h-next; free(p);编写子函数Gethead,使其可
8、以得到栈顶元素,从而得到新的栈顶元素来确认成功int Gethead(node* &h,char a)next=NULL)return FALSE ; a=h-head:调用Gethead函数即可完成功能7)选择需要的功能 scanf( getchar(); switch(m) case 1:Clear(h); case 2: else printf( case 3: scanf( Push(h,x); case 4:Pop(h);Gethead(h,a); case 5: 置空队、判队空、进队、出队、读队头元素、输出1)初始化和建立队列定义结构体 int front; int rear;初始
9、化队列int Init(SqQueue &Q) Q.base=(int *)malloc(MAXQSIZE*sizeof(int); if(!Q.base)return (OVERFLOW); Q.front=Q.rear=0;建立循环队列int Set(SqQueue & Init(Q);请输入队列:ni+)En(Q,stri);2)置空队编写子函数Clear,使其可以实现置空队功能int Clear(SqQueue & if(Q.rear=Q.front)return OK; Q.rear=Q.front;在主函数里调用Clear子函数,就能达到置空队的功能3)判队空编写判断栈空的子函数E
10、mpty,使其实现判队空功能int Empty(SqQueue &在主函数调用时根据队中指针位置判断输出内容if(Q.front=Q.rear)printf(empty else printf(notempty 4)进队从客户端得到所要入队的元素进队元素是:编写子函数En,使其可以实现将元素入栈功能 int En(SqQueue &Q,char e) if(Q.rear+1)%MAXQSIZE=Q.front)return ERROR; Q.baseQ.rear=e; Q.rear=(Q.rear+1)%MAXQSIZE;5)出队编写子函数De,删除队头元素编写子函数Gethead,使其可以得
11、到队头元素,从而得到新的队头元素来确认成功6)读队头元素调用Gethead函数即可实现7)输出队中元素编写子函数Print,使其可以输出队中每一个元素int Print(SqQueue Q) if(Q.rear=Q.front)return ERROR; int a,b; a=Q.front; b=Q.rear; while(a!=b) (printf(,Q.basea); a=(a+1)%MAXQSIZE;8)选择需要的功能选择你需要的功能n1置空队n2判队空n3进队n4出队n5读队头元素n6输出循环队列n while(1)printf( switch(m) case 1:Clear(Q);
12、 else printf( break;你要入队的元素n getchar(); En(Q,x); if(!Empty(Q)De(Q,e); Gethead(Q,a); printf(新队列头元素: else printf(队列已空 break;Gethead(Q,a); case 6:Print(Q);置空队、判队空、进队、出队、读队头元素typedef struct QNode QNode *next; QPtr front; QPtr rear;/定义单链队列的链式存储结构初始化int Initqueue(Qlink & Q.front=Q.rear=(QPtr)malloc(sizeof
13、(QNode);Q.front)exit(OVERFLOW); Q.front-/构造空队列 建立队列 Qlink Setqueue(Qlink & int i; Initqueue(Q); QPtr p;请输入你的队列i+) p=(QPtr)malloc(sizeof(QNode); p-data=stri; Q.rear-next=p; Q.rear=p; return Q;int Clear(Qlink & Q.front=Q.rear; int Empty(Qlink & if(Q.front=Q.rear) return TRUE; return FALSE;入队元素是:int En(Qlink & p=(QPtr)malloc(sizeof(QNode);p)exit(OVERFLOW);data=e;int De(Qlink &Q,char &e) if(Q.front=Q.rear)return FALSE; p=Q.front-next=p- e=p-int Gethead(Qlink Q,char &n) n=Q.front-next-调用函数Gethead就可以达到功能7)功能选择1置空队n2判队空n3进队n4出队n5读队头元素n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1