数据结构学习笔记6(队列)
来源:互联网 发布:软件测试招聘网 编辑:程序博客网 时间:2024/06/05 02:55
1链队列的初始化,建立,插入,查找,删除
转载自http://www.cnblogs.com/newwy/archive/2010/10/10/1847463.html。
本程序的队列实现思想:队列是先进先出的。也就是说看做从后面进从前面出。我本以为用链表实现时做一个双向链表,但是如本文所示,可以做两个链表指针分别指向对头和对尾用作插入数据、删除。至于计数什么的就很简单了
本程序的队列实现思想:队列是先进先出的。也就是说看做从后面进从前面出。我本以为用链表实现时做一个双向链表,但是如本文所示,可以做两个链表指针分别指向对头和对尾用作插入数据、删除。至于计数什么的就很简单了
代码 //////////////////////////////////////////////链队列的初始化,建立,插入,查找,删除。////Author:Wang Yong // //Date: 2010.8.19 //////////////////////////////////////////////#include <stdio.h>#include <stdlib.h>typedef int ElemType;////////////////////////////////////////////定义队列结点类型typedef struct Qnode{ ElemType data; struct Qnode *next;} Qnode;///定义队列结点的头指针,为指针 typedef struct{ Qnode *front; Qnode *rear;}LQueue,*LinkQueue; ////////////////////////////////////////////队列初始化LinkQueue LinkQueueInit(){ LinkQueue Q; Qnode *P; Q = (LinkQueue)malloc(sizeof(LQueue));//申请头,尾指针结点 P = (Qnode *)malloc(sizeof(Qnode));//申请头结点 P->next = NULL; Q->front = Q->rear = P; return Q; }///////////////////////////////////////////入队void LinkQueueEnter(LinkQueue Q,ElemType x){ Qnode *p; p = (Qnode *)malloc(sizeof(Qnode));//申请新结点 p->data = x; p->next = NULL; Q->rear->next = p; Q->rear = p;} ///////////////////////////////////////////出队ElemType LinkQueueOut(LinkQueue Q){ ElemType x; Qnode *p; if(Q->front != Q->rear) { p = Q->front->next;; x = p->data; Q->front->next = p->next;//移动头指针 free(p); if(Q->front->next == NULL)//最后一个元素出队后,队空,修改队尾指针 Q->rear = Q->front; } else return 0; return x;} int main(){ LinkQueue lqueue; lqueue = LinkQueueInit(); ElemType x; printf("请输入入队列的元素:"); while(scanf("%d",&x) != EOF) { LinkQueueEnter(lqueue,x); } Qnode *p; for(p = lqueue->front->next; p != lqueue->rear->next; p = p->next ) printf("%d ",p->data); printf("出队列的结果为:"); while(lqueue->front!= lqueue->rear) { printf("%d ",LinkQueueOut(lqueue)); } return 0;}
2队列的数组实现
转自http://blog.csdn.net/feixiaoxing/article/details/6847885
//设计队列数据结构typedef struct _QUEUE_NODE { int* pData; int length; int head ; int tail; int count; }QUEUE_NODE; //申请队列内存QUEUE_NODE* alloca_queue(int number) { QUEUE_NODE* pQueueNode; if( 0 == number) return NULL; pQueueNode = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE)); assert(NULL != pQueueNode); memset(pQueueNode, 0, sizeof(QUEUE_NODE)); pQueueNode->pData = (int*)malloc(sizeof(int) * number); if(NULL == pQueueNode->pData){ free(pQueueNode); return NULL; } pQueueNode->length = number; return pQueueNode; } //释放队列内存STATUS delete_queue(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return FALSE; assert(NULL != pQueueNode->pData); free(pQueueNode->pData); free((void*)pQueueNode); return TRUE; } //把数据压入队列STATUS insert_queue(QUEUE_NODE* pQueueNode, int value) { if(NULL == pQueueNode) return FALSE; if(pQueueNode->length == pQueueNode->count) return FALSE; pQueueNode->pData[pQueueNode->tail] = value; pQueueNode->tail = (pQueueNode->tail + 1) % pQueueNode->length; pQueueNode->count ++; return TRUE; }//把数据弹出队列STATUS get_queue_data(QUEUE_NODE* pQueueNode, int* value) { if(NULL == pQueueNode || NULL == value) return FALSE; if(0 == pQueueNode->count) return FALSE; *value = pQueueNode->pData[pQueueNode->head]; pQueueNode-> pData[pQueueNode->head] = 0; pQueueNode-> count --; pQueueNode->head = (pQueueNode->head + 1) % pQueueNode->length; return TRUE; } //统计当前队列中有多少数据int get_total_number(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return 0; return pQueueNode->count; } //查看队列中初始化的时候总长度是多少int get_total_number(const QUEUE_NODE* pQueueNode) { if(NULL == pQueueNode) return 0; return pQueueNode->length; }
0 0
- 数据结构学习笔记6(队列)
- 数据结构学习笔记 --- 队列(链队列)
- 数据结构学习笔记 --- 队列(链队列)
- 数据结构学习笔记--队列
- 数据结构学习笔记--队列
- 数据结构学习笔记--队列
- 数据结构学习笔记6——队列
- 数据结构学习笔记 --- 栈、队列 (习题)
- 学习笔记--数据结构(之二)队列
- 数据结构学习笔记 --- 栈、队列 (习题)
- 严蔚敏版数据结构学习笔记(4):队列
- 数据结构学习笔记之队列
- 数据结构学习笔记3-队列
- 数据结构学习笔记之队列
- 【学习笔记----数据结构07-队列】
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 数据结构学习笔记 --- 队列(循环队列-队列的顺序表示和实现)
- 学习笔记:数据结构(二)栈与队列
- android 数据移动
- USACO 1.5.4 Checker Challenge ———— DFS
- socket failed:EACCES(Permission denied)
- UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解
- Three matrices Codeforce 393A
- 数据结构学习笔记6(队列)
- sql语句中where与having的区别
- Dojo 动画<13>
- poj——1190——生日蛋糕
- Android应用自动更新功能的实现!!!
- datanode启动后关闭错误“DataNode: Incompatible build versions: namenode”
- 开发者可以通过Data Protection API 来设定文件系统中的文件、keychain中的项应该何时被解密
- Cocos2d-x Js Binding 的手动绑定实现
- 目标跟踪小结