数据结构学习三(一个简单的队列实现)
2012-10-30 20:19
561 查看
队列(queue)是一种先进先出(first in first out,简称FIFO )线性表。它只允许在一端插入,在一端删除元素。队列像一个单行道的路,先进去的一定先出来。
比如在队列中依次放入 a1,a2,a3,a4(a1 先放入) 从队列中取出元素的顺序 a4,a3,a2,a1(最先取出)
代码如下:(本代码只经过本来的简单测试,可能存在问题。请相信自己的能力,敢于质疑。欢迎提供更好的、更快、更简洁的代码或者方法和指出错误。)
比如在队列中依次放入 a1,a2,a3,a4(a1 先放入) 从队列中取出元素的顺序 a4,a3,a2,a1(最先取出)
代码如下:(本代码只经过本来的简单测试,可能存在问题。请相信自己的能力,敢于质疑。欢迎提供更好的、更快、更简洁的代码或者方法和指出错误。)
#include <stdio.h> #include <stdlib.h> #define PF "%d" #define TYPE int #define OVERFLOW -1 typedef struct node{ TYPE value; struct node * next; }node; typedef struct queue{ struct node *head; struct node *tail; }queue; //初始化队列q,将队列的首尾指向空指针。 void init_que (struct queue *q){ q->head = q->tail = NULL; } //释放队列q,将所有的节点释放。而不是只改变头尾指针。 void destroy_que (struct queue *q){ struct node *p ; while (q->head){ p = q->head; q->head = q->head->next; free(p); } } //向队列q中添加一个新的元素,并且值为(value),添加到队列的尾部 int en_que (struct queue *q, TYPE value){ struct node *new_node = (node*) malloc ( sizeof(struct node) ); if(!new_node){ printf("Memory allocation failure\n");exit(OVERFLOW); } new_node->value = value; new_node->next = NULL; if(!q->head){ q->tail = new_node; q->head = q->tail; } else{ q->tail->next = new_node; q->tail = new_node; } return 0; } //从队列q中头部删除一个新的元素,并且让头部指向下一个元素。 int de_que (struct queue *q, TYPE *value){ struct node *tmp_node; tmp_node = q->head; if(!tmp_node){return -1;} *value = q->head->value; q->head = q->head->next; free(tmp_node); return 0; } //输出队列中的所有的内容的。 int traverse_que (struct queue q){ struct node *tmp = q.head; while (tmp){ printf(PF" | ", tmp->value); tmp = tmp->next; } printf("\n"); return 0; }
相关文章推荐
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 数据结构学习的简单问题(四):用队列自己实现String类
- 数据结构学习中的简单问题(一):用链表方式实现的队列输出杨辉三角
- 数据结构 --静态队列的一个简单的C语言代码实现
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- 数据结构学习二(一个简单栈实现)
- 自己实现一个简单的优先队列-二叉堆
- java线程池学习(二) —— 实现一个简单的线程池
- nginx 学习五 filter模块简介和实现一个简单的filter模块
- 学习javascript的闭包特性用C#来实现一个简单的例子
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- win32sdk学习 richedit实现的一个简单记事本
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
- 数据结构学习记录连载10(队列提高要求实现)
- Unity3D学习(五):实现一个简单的视觉感知
- 每天学习一算法系列(31)(实现一个队列,队列的应用场景为:一个生产者线程将int 类型的数入列,一个消费者线程将int 类型的数出列)
- 【数据结构】两个队列实现一个栈
- 一个静态数组实现的简单队列