C 数据结构:队列的链式存储
一、实现
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data_;
struct node* next_;
}Node;
typedef struct queue
{
Node* front_;
Node* rear_;
}Queue;
void initQueue(Queue * queue);
int isEmpty(Queue *queue);
void enQueue(Queue *queue, char ch);
char deQueue(Queue *queue);
void destroyQueue(Queue *queue);
int main()
{
Queue q;
initQueue(&q);
for (char ch = 'A'; ch <= 'D'; ++ch)
{
enQueue(&q, ch);
}
while (!isEmpty(&q)) printf("%2c", deQueue(&q));
destroyQueue(&q);
puts("");
return 0;
}
void initQueue(Queue * queue)
{
queue->front_ = queue->rear_ = (Node*)malloc(sizeof(Node));
if (NULL == queue->front_) exit(-1);
queue->front_->next_ = NULL;
}
int isEmpty(Queue *queue) { return queue->front_ == queue->rear_; }
void enQueue(Queue *queue, char ch)//尾插法
{
Node* ptr = (Node*)malloc(sizeof(Node));
if (NULL == ptr) exit(-1);
ptr->data_ = ch;
ptr->next_ = NULL;
queue->rear_->next_ = ptr;
queue->rear_ = ptr;
}
char deQueue(Queue *queue)
{
char tmp = queue->front_->next_->data_;
if (queue->front_->next_ == queue->rear_)//头结点后只有一个节点
{
queue->rear_=queue->front_;
free(queue->front_->next_);
queue->front_->next_ = NULL;
}
else
{
Node* tp = queue->front_->next_;
queue->front_->next_ = tp->next_;
free(tp);
}
return tmp;
}
void destroyQueue(Queue *queue)
{
Node *tp = queue->front_->next_;
queue->front_->next_ = NULL;
queue->rear_ = queue->front_;
Node* t;
while (tp)
{
t = tp->next_;
free(tp);
tp = t;
}
free(queue->front_);
}
二、过程演示