网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构第三章2009.ppt

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第三章2009

Status InitQueue (SqQueue Q) { // 构造一个空队列Q Q.base = (ElemType *) malloc (MAXQSIZE *sizeof (ElemType)); if (!Q.base) exit (OVERFLOW); // 存储分配失败 Q.front = Q.rear = 0; return OK; } Status EnQueue (SqQueue Q, ElemType e) { // 插入元素e为Q的新的队尾元素 if ((Q.rear+1) % MAXQSIZE == Q.front) return ERROR; // Q.base[Q.rear] = e; Q.rear = (Q.rear+1) % MAXQSIZE; return OK; } 队列满 Status DeQueue (SqQueue Q, ElemType e) { // 若队列不空,则删除Q的队头元素, // 用e返回其值,并返回OK; 否则返回ERROR if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front+1) % MAXQSIZE; return OK; } 1. 掌握栈和队列类型的特点,并能在相应的应用问题中正确选用它们。  2. 熟练掌握栈类型的两种实现方法,特别应注意栈满和栈空的条件以及它们的描述方法。  3. 熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法。 本章学习要点 习 题 1、如果进栈的数据元素序列为123456,能否得到435612和135426的出栈序列?并说明原因。 2、链栈中为何不设头指针? 3、循环队列的优点是什么?如何判断它的空和满? 4、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2 、e4、 e3、 e6 、e5、 e1、 ,则栈S的容量至少是? 5、设长度为n的链队列用单循环链表表示,若只设头指针,则怎样进行入队和出队操作;若只设尾指针呢?出队和入队的时间复杂度分别为? 6、指出下列程序段的功能是什么? (1) void demo1(seqstack *s){ int i;arr[64];n=0; while (!stackempty(s)) arr[n++]=pos(s); for(i=0;n;i++) push(s,arr[i]); } (2) void demo2(seqstack *s,int m){ seqstack t; int i; initstack(t); while(! Stackempty(s)) if(I=pop(s)!=m) push(t,i); While(! Stackempty(t)) { i=pop(t); push(s,i); } } 7、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,请写出相应的入队列和出队列算法。 在队列插入一个结点的操作是在队尾进行的,所以应在循环链表的尾部插入一个结点: Void Inqueue(Lklist *rear, int x) { Lklist *head,*s; s=(Lklist*)malloc(sizeof(Lklist));//建立一个新结点 s-data=x; head=rear-next; rear-next=s;// 将结点插入 rear=s; //rear 指向新的链尾结点 rear-next=head;// 形成循环 } 在队列中删除一个结点是在队首进行的,所以应删除循环链表的第一个数据结点。 Void Dequeue(Lklist *rear) { Lklist *head; if(rear-next==rear) printf(“The queue is empty!\n”); else { head=rear-next; rear-next=head-next-next;//删除第一个数据结

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档