第2章线性表2栈和队列教程.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
void division(int r[][N],int n, int cq[], int newr[],int result[]) { int k,i,pre,group; for(k=0;kn;k++)cq[k]=k+1; front=n-1; rear=n-1; for(k=0;kn;k++)newr[k]=0; group=1; pre=0; do{ front=(front+1)%n;i=cq[front];if(ipre){ group++;result[i-1]=group;for(k=0;kn;k++)newr[k]=r[i-1][k];} else if(newr[i-1]!=0){ rear=(rear+1)%n;cq[rear]=i;}else{ result[i-1]=group;for(k=0;kn;k++)newr[k]=newr[k]+r[i-1][k];}pre=i;}while(rear!=front); } 算法描述 小 结 线性表、栈与队的异同点 相同点:逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 不同点: 运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。 用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、多道作业处理和简化设计等。 * * 循环队列的基本运算 循环队列初始化 Status Queue_Init(QueuePtr q) {Status outcome = fatal;QueuePtr queueptr = (QueuePtr)malloc(sizeof(Queue));if (queueptr) {queueptr-front=queueptr-rear=0;q = queueptr;outcome = success;}return outcome; } 循环队列的基本运算 判断队列是否为空 Status Queue_Empty(QueuePtr q) {return q-front == q-rear; } 判断队列是否满 Status Queue_Full(QueuePtr *q) {return (q-rear+1) % MAXQUEUE == q-front; } 循环队列的入队 Status Queue_Append(QueuePtr q, QueueEntry item) {Status outcome = overflow;if (!Queue_Full(q) ) {q-rear = (q-rear+1) % MAXQUEUE;q-entry[q-rear] = item;outcome = success;}return outcome; } 循环队列的出队 Status Queue_Append(QueuePtr q, QueueEntry *item) {Status outcome = underflow;if (!Queue_Empty(q) ) {q-front = (q-front+1) % MAXQUEUE;*item = q-entry[q-front];outcome = success;}return outcome; } 队列的链式存储 选择哪种链表作为队列存储结构? 带头结点的单链表 头尾指针如何表示? 2个指针/带头结点的单链表 队列链式存储的数据结构 typedef struct node {/*链式队列的结点结构*/QueueEntry Entry;/*队列的数据元素类型*/struct node *next;/*指向后继结点的指针*/ } QueueNode, *QueueNodePtr; typedef struct queue{/*链式队列*/QueueNode *front;/*队头指针*/QueueNode *rear;/*队尾指针*/ } Queue,*QueuePtr; 队列链式存储的入队 void EnQueue(QueuePtr Q, QueueEntry x) {QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode));p-Entry = x; p-next=null;if (QueueEmpty(Q) ) {Q-front = Q-rear=p; /*将x插入空队列*/else/*x插入非空队列的尾*/Q-rear-next=p;/*p链到原队尾结点后

文档评论(0)

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

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

1亿VIP精品文档

相关文档