链式队列操作,初始化,入队,出队
2012-10-02 14:18
609 查看
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> #define OK 1 #define OVERFLOW -1 #define TRUE 1 #define FALSE 0 #define ERROR 0 typedef int QElemType; typedef int Status; typedef struct QNode { QElemType data; QNode *next; }*QueuePtr; struct LinkQueue { QueuePtr front, rear; }; Status InitQueue(LinkQueue &Q) { if (!(Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)))) exit(OVERFLOW); Q.front -> next = NULL; return OK; }; Status DestoryQueue(LinkQueue &Q) { while(Q.front) { Q.rear = Q.front->next; free(Q.front); Q.front = NULL; Q.front = Q.rear; } return OK; } Status ClearQueue(LinkQueue &Q) { QueuePtr q,p; Q.rear = Q.front; p = Q.front->next; Q.front->next = NULL; while(p) { q = p->next; free(p); p = q; } return OK; } Status QueueEmpty(LinkQueue Q) { if (Q.front->next == NULL) return TRUE; else return FALSE; } Status QueueLength(LinkQueue Q) { int i = 0; QueuePtr p; p = Q.front->next; while(p) { ++i; p = p->next; } return i; } Status GetHead(LinkQueue Q,QElemType &e) { QueuePtr p; if(Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data; return OK; } Status EnQueue(LinkQueue &Q,QElemType e) { QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); if(!p) return OVERFLOW; p->data = e; Q.rear->next = p; Q.rear = p; p->next = NULL; return OK; } Status DeQueue(LinkQueue &Q,QElemType &e) { QueuePtr p; if(Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data; Q.front->next = p->next; free(p); return OK; } Status QueueTraverse(LinkQueue Q,void(*visit)(QElemType)) { QueuePtr q; q = Q.front->next; while(q) { visit(q->data); q = q->next; } printf("\n"); return OK; } void visit(QElemType e) { printf("%d ",e); } int main() { int i; QElemType e; LinkQueue q; i = InitQueue(q); if(i) printf("Create empty queue successfully!\n"); printf("Is it empty? %d(1:Yes 0:NO)\n",QueueEmpty(q)); printf("The length of queue is %d\n",QueueLength(q)); EnQueue(q,-5); EnQueue(q,5); EnQueue(q,10); printf("After insert three element(-5,5,10),the length of queue is %d.\n",QueueLength(q)); printf("Is it empty? %d.(1:YES 0:NO)\n",QueueEmpty(q)); printf("The element of queue are\n"); QueueTraverse(q,visit); i = GetHead(q,e); if(i == OK) printf("the head element is %d\n",e); ClearQueue(q); printf("After clear queue,q.front=%#p q.rear=%#p q.front->next=%u\n",q.front,q.rear,q.front->next); DestoryQueue(q); printf("After destory queue,q.front=%#p q.rear=%#p\n",q.front,q.rear); return 0; }
相关文章推荐
- 采用链式存储实现队列的初始化、入队、出队操作。
- 链队列的初始化、入队、出队等操作实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 顺序队列的创建、初始化、判断空、入队、出队、读取队头元素、置空、求队长操作
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 循环队列的初始化、入队、出队等基本操作
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 链队列的初始化、入队、出队等操作实现
- 子函数实现链式队列 的 操作,创建、入队、出队、退出。
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- C语言实现顺序队列的初始化、入队、出队等操作(三)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 链式队列的入队出队操作
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 循环队列和链式队列的结构及其基本操作(入队、出队、取队头、查看对内元素)
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)