1 /* 2 * 六、数据结构基础之链队列 3 * 链队列数据结构: 4 * 限制在表头删除和表尾插入的单链表 5 * --- 2012年4月29日 ---by lee 6 */ 7 8 #ifndef _LINKED_QUEUE_H 9 #define _LINKED_QUEUE_H 10 11 #include "Utility.h" 12 13 //元素类型定义 14 typedef int DataType; 15 16 //链队列中结点结构的定义 17 typedef struct _QueueNode 18 { 19 DataType data; 20 struct _QueueNode *next; 21 } QueueNode; 22 23 //链队列结构的定义 24 typedef struct _LinkedQueue 25 { 26 QueueNode *front;//指向队列头结点的指针 27 QueueNode *rear;//指向队列尾结点的指针 28 } LinkedQueue; 29 30 31 //对链队列的基本操作 32 33 void InitQueue(LinkedQueue* queue);//初始化,构造空队 34 int IsQueueEmpty(LinkedQueue* queue);//判断队是否为空 35 void EnQueue(LinkedQueue* queue, DataType x);//元素x入队 36 DataType DeQueue(LinkedQueue* queue);//出队,返回队首元素 37 DataType QueueFront(LinkedQueue* queue);//取队首元素 38 39 //初始化,构造空队 40 void InitQueue(LinkedQueue* queue) 41 { 42 queue->front=queue->rear=NULL; 43 } 44 45 //判断队是否为空 46 int IsQueueEmpty(LinkedQueue* queue) 47 { 48 return ((NULL==queue->front) && (NULL==queue->rear)); 49 } 50 51 //元素x入队 52 void EnQueue(LinkedQueue* queue, DataType x) 53 { 54 QueueNode *node=(QueueNode*)malloc(sizeof(QueueNode)); 55 node->data=x; 56 node->next=NULL; 57 //判断是否是空队列 58 if(IsQueueEmpty(queue)) 59 { 60 queue->rear=queue->front=node; 61 } 62 else 63 { 64 queue->rear->next=node;//非空队列,则在尾指针后插入 65 queue->rear=node;//队尾指针指向新的队尾 66 } 67 } 68 69 //出队,返回队首元素 70 DataType DeQueue(LinkedQueue* queue) 71 { 72 //判断是否是空队列 73 if(IsQueueEmpty(queue)) 74 Error("Queue is empty"); 75 76 QueueNode *p=queue->front; 77 DataType ret=p->data; 78 queue->front=p->next; 79 //判断是否只有一个结点 80 if(p==queue->rear) 81 queue->rear=NULL;//删除最后一个节点时,要修改尾指针 82 free(p); 83 p=NULL; 84 return ret; 85 } 86 87 //取队首元素 88 DataType QueueFront(LinkedQueue* queue) 89 { 90 if(IsQueueEmpty(queue)) 91 Error("Queue is empty"); 92 93 return queue->front->data; 94 } 95 96 97 98 #endif 99 100 //测试代码 101 /* 102 LinkedQueue q; 103 InitQueue(&q); 104 EnQueue(&q,1); 105 EnQueue(&q,2); 106 printf("Queue Front: %d\n",DeQueue(&q)); 107 printf("Queue Front: %d\n",DeQueue(&q)); 108 DeQueue(&q); 109 */
转载于:https://www.cnblogs.com/programlee/archive/2012/05/05/2485119.html