数据结构学习三(一个简单的队列实现)
比如在队列中依次放入 a1,a2,a3,a4(a1 先放入) 从队列中取出元素的顺序 a4,a3,a2,a1(最先取出)
代码如下:(本代码只经过本来的简单测试,可能存在问题。请相信自己的能力,敢于质疑。欢迎提供更好的、更快、更简洁的代码或者方法和指出错误。)
#include <stdio.h>#include <stdlib.h>#define PF "%d"#define TYPE int #define OVERFLOW -1typedef 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 = q->head;while (q->head){ q->head = q->head->next;p = q->head;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;}