设有m个连续单元供一个栈与队列使用,且栈与队列的实际占用单元数事先不知道,但是要求在任何时刻它们占用的单元数量不超过m,试写出上述栈与队列的插入算法。

admin2012-06-21  58

问题 设有m个连续单元供一个栈与队列使用,且栈与队列的实际占用单元数事先不知道,但是要求在任何时刻它们占用的单元数量不超过m,试写出上述栈与队列的插入算法。

选项

答案算法如下: //定义结点的结构为 struct Node{ ElemType data; struct Node*next; } //定义栈的结构 struct Stack{ Node*base; Node*top; } //定义队列的结构 struct Queue{ Node*front; Node*tail; }; //设m个连续单元的数组为b[m],定义全局数组static int a[m]用以标识m个单元中各个单元是否被占用 //a[i]=1表示已占用,a[i]=0表示未被占用 void InsertStack(struct stack&S,ElemType elem) { for(int i=0;i<m;i++) if(a[i]==0) break; if(i==m) { printf("NO SPACE\n"); return; } a[i]=1; Node*p=&b[i]; p->data=elem; p->next=NULL; if(S.base==NULL) { S.base=p; S.top=p; } else { p->next=p; S.top=p; } } void InsertQueue(struct Queue&Q,ElemType elem) { for(int i=0;i<m;i++) if(a[i]==0) break; if(i==m) { printf("NO SPACE\n"); return; } a[i]=1; Node*p=&b[i]; p->data=elem; p->next=NULL; if(Q.front==NULL) { Q.front=p; Q.tail=p; } else { Q.tail->next=p; Q.tail=p; } }

解析
转载请注明原文地址:https://kaotiyun.com/show/3Axi777K
0

最新回复(0)