修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针
来源:互联网 发布:阿里云公司 编辑:程序博客网 时间:2024/06/08 02:22
/*构造一个空队列*/Queue *InitQueue() {Queue *pqueue = (Queue *)malloc(sizeof(Queue));if(pqueue!=NULL){pqueue->front = NULL;pqueue->rear = NULL;pqueue->size = 0;//pqueue->status=1;//初始化为send数据}return pqueue;}/*销毁一个队列*/void DestroyQueue(Queue *pqueue){if(IsEmpty(pqueue)!=1)ClearQueue(pqueue);free(pqueue);}/*清空一个队列*/void ClearQueue(Queue *pqueue){while(IsEmpty(pqueue)!=1){DeQueue(pqueue,NULL,NULL);}}/*判断队列是否为空*/int IsEmpty(Queue *pqueue){if(pqueue->front==NULL&&pqueue->rear==NULL&&pqueue->size==0)return 1;elsereturn 0;}/*返回队列大小*/int GetSize(Queue *pqueue){return pqueue->size;}/*将新元素入队*/PNode EnQueue(Queue *pqueue,Item item,int sid){int length = 0;PNode pnode = (PNode)malloc(sizeof(Node));if(pnode != NULL){// 这里一定要+1length = strlen(item)*sizeof(char)+1;//pnode->data = item;pnode->data = (Item)malloc(length);memset(pnode->data, 0, length);memcpy(pnode->data, item, length);pnode->next = NULL;pnode->status = sid;if(IsEmpty(pqueue)){pqueue->front = pnode;}else{pqueue->rear->next = pnode;}pqueue->rear = pnode;pqueue->size++;}return pnode;}/*队头元素出队*/PNode DeQueue(Queue *pqueue,Item pitem,int *sid){PNode pnode = pqueue->front;if(IsEmpty(pqueue)!=1&&pnode!=NULL){if(pitem!=NULL){//*pitem = pnode->data;memcpy(pitem, pnode->data, strlen(pnode->data));free(pnode->data);*sid = pnode->status;}pqueue->size--;pqueue->front = pnode->next;free(pnode);if(pqueue->size==0)pqueue->rear = NULL;}return pqueue->front;}/*遍历队列*/ void QueueTraverse(Queue* pqueue) { PNode pnode = pqueue->front; int i = pqueue->size; while(i--) { printf("遍历队列第 %d 个元素 为: %s\n", i, pnode->data);pnode = pnode->next; } }
头文件
#ifndef Queue_H#define Queue_Htypedef char* Item;typedef struct node * PNode;typedef struct node{Item data;PNode next;int status;//status=1 表明是send 数据,=2为recv数据}Node;typedef struct{PNode front;PNode rear;int size;}Queue;/*构造一个空队列*/Queue *InitQueue(); /*销毁一个队列*/void DestroyQueue(Queue *pqueue);/*清空一个队列*/void ClearQueue(Queue *pqueue);/*判断队列是否为空*/int IsEmpty(Queue *pqueue);/*返回队列大小*/int GetSize(Queue *pqueue);/*将新元素入队*/PNode EnQueue(Queue *pqueue,Item item,int sid);/*队头元素出队*/PNode DeQueue(Queue *pqueue,Item pitem,int *sid);/*遍历队列,并对各项数据调用visit函数*/ void QueueTraverse(Queue* pqueue); #endif
- 修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针
- 数据结构--堆和队列&&C语言的内存分配--堆和栈
- 队列---C语言实现---三种内存分配方式
- C语言程序内存分配中的堆和栈
- C语言程序编译的内存分配,堆与栈的区别
- C语言程序编译的内存分配,堆与栈的区别
- C语言程序编译的内存分配,堆与栈的区别
- C语言程序的内存分配方式
- C语言程序编译的内存分配:
- C语言程序编译的内存分配
- C语言程序的内存分配方式
- C语言程序变异的内存分配
- C语言程序的内存分配方式
- c语言最小堆的实现-优先队列
- C语言内存分配时的栈和堆
- Java中堆内存和栈内存_在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)。修改栈指针就可以把栈中的内容销毁.这样最快
- c语言程序内存分配
- java内存分配分析 及堆、栈和队列分析
- PHP 获取文件的扩展名的6种方法
- Android ViewPager使用方法
- bsdiff源码
- ubuntu下配置安装jdk1.6实用简单方法详解
- hadoop单节点安装(伪分布式)
- 修改的 创建队列程序 C语言。 队列元素 是堆分配内存,而非指针
- oracle dual表
- 启动app ,EditText失去焦点,点击获取焦点
- 在网页中交互unity3d
- 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
- Linux下Makefile的automake生成全攻略
- MapReduce中的自定义多目录/文件名输出HDFS
- IOS汉字编码转化 分类: IOS
- 关于PropertyEditorSupport