7感门 20023
数据结构作业 2002 年 第三章 栈和队列
328假设带表头结点的循环链表表示队列,并且只设一不指 针指向队尾元素结点(注意不设头指针),试编写相应的队 列初始化、入队和出队的算法。 非空情况:四 rear an 头结点指针:rear>next; 首元素指针:rear>next->next 用指针rear 空队情况:「∥ rear 表示队列 空队条件:rear->next=rear;
3.28 假设带表头结点的循环链表表示队列,并且只设一个指 针指向队尾元素结点(注意不设头指针),试编写相应的队 列初始化、入队和出队的算法。 非空情况: /// a1 a2 an 头结点指针:rear->next; 首元素指针:rear->next->next; rear 空队情况: /// 空队条件:rear->next=rear; rear 用指针rear 表示队列
(1)定义类型: typedef struct Nodei ElemType data struct Node *next 3 Node, * LinkQue Link Que InitQue( void) Link Que EnQueue(Link Que rear, ElemType e) LinkQue DeQueue Link Que rear, ElemType e) main Link Que que l, que2; int elem quel=InitQueo; que2-InitQueo quel= EnQueue(quel, 10); que l= DeQueue( quel, &elem)
(1) 定义类型: typedef struct Node{ ElemType data; struct Node *next; } Node, *LinkQue; LinkQue InitQue(void); LinkQue EnQueue(LinkQue rear, ElemType e); LinkQue DeQueue(LinkQue rear, ElemType e); main() {LinkQue que1,que2; int elem; que1=InitQue(); que2=InitQue(); que1= EnQueue(que1, 10); que1= DeQueue(que1, &elem); }
(2)初始化算法 返回值为NULL表示初始化失败,非NULL表示成功 Link Que InitQue(void) f Link Que p; p=malloc(sizeof(Node)) if (p printf(OVERFLOW); return NULL, p-next-p return p
(2) 初始化算法: 返回值为NULL表示初始化失败,非NULL表示成功。 LinkQue InitQue(void) { LinkQue p; p=malloc(sizeof(Node)); if (!p) { printf(“OVERFLOW”); return NULL;} p->next=p; return p; }
(3)人队列算法: 返回值为NULL表示入队列失败,非NUL表示成功 Link Que EnQueue Link Que rear, ElemType e) f Link Que p p=malloc(sizeof(Node) if (p)i printfcoVerFloW); return NULL, p-data=e p->next-rear->next /*新结点指向表头结点* rear->ne /*原表尾结点指向新结点* reap 表尾指针指向新结点为新表尾* return rear;}*返回表尾指针*
(3) 入队列算法: 返回值为NULL表示入队列失败,非NULL表示成功。 LinkQue EnQueue(LinkQue rear, ElemType e); { LinkQue p; p=malloc(sizeof(Node)); if (!p) { printf(“OVERFLOW”); return NULL;} p->data=e; p->next=rear->next; /*新结点指向表头结点*/ rear->next=p; /*原表尾结点指向新结点*/ rear=p; /*表尾指针指向新结点为新表尾*/ return rear; } /*返回表尾指针*/