您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习三(一个简单的队列实现)

2012-10-30 20:19 561 查看
  队列(queue)是一种先进先出(first in first out,简称FIFO )线性表。它只允许在一端插入,在一端删除元素。队列像一个单行道的路,先进去的一定先出来。
   比如在队列中依次放入 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐