首页 > 代码库 > 单链队列
单链队列
1 /** 2 * @brief 队列的链式表示与实现 3 * 4 * @author amur-leopard 5 * 6 * @date 2014/06/01 7 */ 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 //-----------------预定义常量和类型------------------- 12 #define OK 1 13 #define ERROR 0 14 #define OVERFLOW -1 15 16 typedef int status; // 函数类型,其值是函数结果状态代码 17 18 19 //----------------队列的链式存储结构------------------ 20 struct node 21 { 22 int data; 23 struct node *next; 24 }; 25 26 typedef struct node node; 27 28 typedef struct 29 { 30 struct node *front; 31 struct node *back; 32 }link_queue; 33 34 35 //------------------基本操作的声明-------------------- 36 status init(link_queue &queue); // 初始化队列 37 status enqueue(link_queue &queue, int e); // 入队 38 status dequeue(link_queue &queue, int &e); // 出队 39 40 //------------------基本操作的实现-------------------- 41 /** 42 * @brief 初始化队列 43 * 44 * @param queue 队列 45 * 46 * @return 函数状态 47 */ 48 status init(link_queue &queue) 49 { 50 queue.front = queue.back = (node *)malloc(sizeof(node)); // 头结点 51 if(!queue.front) 52 { 53 exit(OVERFLOW); 54 } 55 queue.front->next = NULL; // queue.back->next = NULL 56 return OK; 57 } 58 59 /** 60 * @brief 入队 61 * 62 * @queue queue 队列 63 * @param e 入队元素 64 * 65 * @return 函数状态 66 */ 67 status enqueue(link_queue &queue, int e) 68 { 69 node *n = (node *)malloc(sizeof(node)); // 新入队元素结点 70 if(!n) 71 { 72 exit(OVERFLOW); 73 } 74 n->data =http://www.mamicode.com/ e; 75 n->next = NULL; 76 queue.back->next = n; 77 queue.back = n; 78 return OK; 79 } 80 81 /** 82 * @brief 出队 83 * 84 * @queue queue 队列 85 * @queue e 用于返回队首元素 86 * 87 * @return 函数状态 88 */ 89 status dequeue(link_queue &queue, int &e) 90 { 91 node *p; // 用于指向队首 92 if(queue.front == queue.back) 93 { 94 return ERROR; 95 } 96 p = queue.front->next; 97 e = p->data; 98 queue.front->next = p->next; 99 if(queue.back == p) // 最后一个元素 100 { 101 queue.back = queue.front; // 队尾指针重新赋值 102 } 103 free(p); 104 return OK; 105 } 106 107 108 //-----------------------测试------------------------- 109 /** 110 * @brief 测试函数 111 */ 112 void main() 113 { 114 int e; link_queue queue; init(queue); 115 116 if(OK == enqueue(queue, 11)) printf("enqueue succeed! 11\n"); 117 if(OK == enqueue(queue, 22)) printf("enqueue succeed! 22\n"); 118 if(OK == enqueue(queue, 33)) printf("enqueue succeed! 33\n"); 119 120 if(OK == dequeue(queue, e)) printf("dequeue succeed! %d\n", e); 121 if(OK == dequeue(queue, e)) printf("dequeue succeed! %d\n", e); 122 if(OK == dequeue(queue, e)) printf("dequeue succeed! %d\n", e); 123 124 if(ERROR == dequeue(queue, e)) printf("empty!\n"); 125 126 system("pause"); 127 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。