1、顺序表: #include stdio.h#define DataType char#define sqstack_maxsize 40typedef struct sqstack DataType datasqstack_maxsize;int top; SqStackTp;int InitStack(SqStackTp *sq) sq-top=0; return(1);int Push(SqStackTp *sq,DataType x)if(sq-top=sqstack_maxsize-1) printf(栈满); return(0);else sq-top+; sq-datasq-top
2、=x;int Pop(SqStackTp *sq,DataType *x)if (sq-top=0) printf(下溢else *x=sq-top;top-;int EmptyStack(SqStackTp *sq)top=0)return(1);else return(0);/*主函数*/void main() SqStackTp sq;DataType ch;InitStack(&sq);for (ch=A;chdata=x;next=*ls;*ls=p;int Pop(LStackTp *ls,datatype *x)if(*ls)!=NULL) p=*ls;*x=p-data;*ls
3、=(*ls)-next;free(p);return(1); else return(0);int EmptyStack(LStackTp ls)if(ls=NULL) return(1); LStackTp ls;datatype ch;InitStack(ls);ls,ch);,ls-data);EmptyStack(ls)ls,& 有两个栈A,B这两个栈中分别存储这一个升序数列,现要求编写算法把这两个栈中的数合成一个升序队列link merge(link a,link b) link h,s,m,n,t; h=(cnode *)malloc(sizeof(cnode); h-next=N
4、ULL; s=h; m=a; n=b; while(m-next&n-next) if(m-next-data m-next=t- t-next=s- s-next=t; s=t; else if(m-data=n- n=n- else t=n- n- while(n- free(m); free(n); return h;4 设两个栈共享一个数组空间,其类型定义见节,试写出两个栈公用的读栈顶元算法elemtp top_dustack(dustacktp ds,p;int i);进栈操作算法void push_dustack(dustacktp ds,p;int i , elemtp x);及
5、出栈算法 elemtp pop_ dustack(dustacktp ds,p;int i )。其中i的取值是1或2,用以指示栈号。读栈顶元函数 elemtp top_sqstack(s:sqstacktp) if( s.top=0) return(null);return(s.elems.top);进栈操作 void push_sqstack(sqstacktp s,elemtp x) 若栈s未满,将元素x压入栈中;否则,栈的状态不变并给出出错信息 if(s.top=maxsize) printf(“Overflow”); else s.top+; 栈顶指针加1 s.elems.top=x
6、x进栈 出栈函数 elemtp pop_sqstack(sqstacktp s) 若栈s不空,则删去栈顶元素并返回元素值,否则返回空元素NULL if(s.top=0) s.top-; 栈顶指针减1 teturn(s.elems.top+1); 返回原栈顶元素值5假设以数组sequ(0.m-1)存放循环队列元素,同时设变量rear和quelen分别指示循环队列中队尾元素和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。队满的条件 (sq.rear+1) MOD maxsize=sq.front入队列操作 void en_cqueu
7、e(cqueuetp cq,elemtp x) 若循环队列cq未满,插入x为新的队尾元素;否则队列状态不变并给出错误信息 if (cq.rear+1) MOD maxsize=cq.front) cq.rear=(cq.rear+1) MOD maxsize; cq.elemcq.rear=x 出队列函数 elemtp dl_cqueue(VAR cq:cqueuetp) 若循环队列cq不空,则删去队头元素并返回元素值;否则返回空元素NULL if( cq.front=cq.rear) return(NULL); cq.front=(cq.front+1) MOD maxsize; return(cq.elemcq.front);6 假设以带头结点的环形链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的初始化队列、入队列、出队列的算法。初始化: void init_lqueue( lqueuetp lq) 设置一个空的链队列lq new(lq.front); lq.front-next:=NIL; lq.rear=lq.front; 入队列操作: PROC en_lqueue(V
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1