C语言链表实现队列操作
还是操作队列,但是这次换成链表,但是要注意出队的操作。
一般的思维是在出队的时候,删除头结点的下一个节点,这样的话确实可以将队列中的节点全部删除,但是如果我们将最后一个节点删除的时候,我们的算法就将tail指针赋值为NULL,这时如果再进行入队操作的时候,就会发生段错误。为什么呢?因为tail指针这是的值已经是NULL了,再将tail的后面接节点的话就会访问非法的内存空间。所以我们在出队操作的时候就直接删除头结点,然后将head指针指向下一个节点,这样下一个节点就成为头结点了,他自然就不是队列中的一员了。
下面是源代码:
/************************************************************************* > File Name: linkqueue.c > Author: Baniel Gao > Mail: createchance@163.com > Blog: blog.csdn.net/createchance > Created Time: Fri 20 Dec 2013 01:53:21 PM CST ************************************************************************/#include#include typedef struct _nodequeue_ { int data; struct _nodequeue_ *next;} nodequeue_st;typedef struct _linkqueue_ { int total; int current; nodequeue_st *head; nodequeue_st *tail;} linkqueue_st;linkqueue_st *linkqueue_init(int size);nodequeue_st *linkqueue_node_create(int value);int linkqueue_enqueue(linkqueue_st *queue, int value);int linkqueue_isfull(linkqueue_st *queue);int linkqueue_dequeue(linkqueue_st *queue, int *value);int linkqueue_isempty(linkqueue_st *queue);int linkqueue_free(linkqueue_st *queue);int main(void){ linkqueue_st *queue = NULL; int value = 100; int size = 10; queue = linkqueue_init(size); while (-1 != linkqueue_enqueue(queue, value)) value++; while (-1 != linkqueue_dequeue(queue, &value)) printf("%5d", value); putchar('/n'); linkqueue_free(queue); return 0;}linkqueue_st *linkqueue_init(int size){ linkqueue_st *queue; queue = (linkqueue_st *)malloc(sizeof(linkqueue_st)); queue->total = size; queue->current = 0; queue->head = linkqueue_node_create(0); queue->tail = queue->head; return queue;}nodequeue_st *linkqueue_node_create(int value){ nodequeue_st *node = NULL; node = (nodequeue_st *)malloc(sizeof(nodequeue_st)); node->data = value; node->next = NULL; return node;}int linkqueue_enqueue(linkqueue_st *queue, int value){ nodequeue_st *node = NULL; if (linkqueue_isfull(queue)) return -1; node = linkqueue_node_create(value); node->next = queue->tail->next; queue->tail->next = node; queue->tail = node; queue->current++; return 0;}int linkqueue_dequeue(linkqueue_st *queue, int *value){ nodequeue_st *tmp = NULL; if (linkqueue_isempty(queue)) return -1; tmp = queue->head; *value = tmp->next->data; queue->head = queue->head->next; free(tmp); queue->current--; return 0;}int linkqueue_isfull(linkqueue_st *queue){ if (queue->current == queue->total) return 1; return 0;}int linkqueue_isempty(linkqueue_st *queue){ if (queue->current == 0) return 1; return 0;}int linkqueue_free(linkqueue_st *queue){ nodequeue_st *node = queue->head; nodequeue_st *tmp = NULL; while (node != NULL) { tmp = node; node = node->next; free(tmp); } free(queue); return 0;}
>更多相关文章
- 09-29如何通过wrap malloc定位C/C++程序的内存泄漏
- 02-25打车软件大战升级,补贴还能维持多久?
- 12-23BMP文件右旋90度[c语言]
- 12-23寻找直方图中面积最大的矩形(C语言版)
- 12-23[ndk,2]ndk开发案例和错误处理
- 12-23[ndk,1]ndk开发,C语言入门讲解
- 12-23C语言连续存储实现队列机制
- 12-23Objective-c 数据类型
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 11-18LG新能源宣布与Bear Robotics达成合作,成为
- 11-18机构:三季度全球个人智能音频设备市场强势
- 11-18闲鱼:注册用户过6亿 AI技术已应用于闲置交
- 11-18美柚、宝宝树回应“涉黄短信骚扰”:未发现
- 11-01京东七鲜与前置仓完成融合
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御