数据结构——c队列实现
使用双向链表
#include<stdlib.h> // 队列结点的结构 typedef struct _qNode{ int data; struct _qNode *prior; struct _qNode *next; }QNode; // 队列 typedef struct _queue{ QNode *head; QNode *tail; } queue; // 初始化,注意这里使用一级指针 void initQueue(queue *q) { q->head = NULL; q->tail = NULL; } // 入队 void enqueue(queue *q, int val) { QNode *temp = (QNode*)malloc(sizeof(QNode)); // 队列为空 if( q->head == NULL) { // 对新结点设置值 temp->data = val; temp->prior = NULL; temp->next = NULL; // 修改队列的头指针和尾指针 q->head = temp; q->tail = temp; return; } // 设置新结点值 temp->data = val; // 在旧链表头结点前插入新结点,使新结点成为链表头结点 temp->next = q->head; q->head->prior = temp; q->head = temp; } // 出队, 从链表 int dequeue(queue *q) { int val = 0; QNode *t; // 只有一个结点 if( q->tail->prior == NULL) { val = q->tail->data; t = q->tail; q->tail = q->head = NULL; free(t); return val; } t = q->tail; q->tail = q->tail->prior; //指向倒数第二个结点 q->tail->next = NULL; val = t->data; free(t); return val; } void printQ(QNode *q) { while(q) { printf("%3d", q->data); q = q->prior; } }
运行如下
$ ./queue 5 6 7
一干解千愁

浙公网安备 33010602011771号