参考了 严蔚敏 的 《数据结构》(C语言版)
队列 是特殊的 线性表 ,规则就是先入队列的数据先出队列。
本篇的队头指针指向一块空间, 此空间指向的下一个空间才是队列的最前面的结点,尾结点就是指向最后一个元素。
#include <iostream>
using namespace std;
#define QElemtype int
#define Status bool
typedef struct QNode{
QElemtype data; //数据
struct QNode * next; //指向下一个结点
} * QueuePtr, QNode;
typedef struct {
QueuePtr front; //头指针
QueuePtr rear; //尾指针
}LinkQueue;
//初始化队列
Status InitQueue(LinkQueue & Q){
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QElemtype));
if(!Q.front) return false;
Q.front->next = NULL;
return true;
}
//销毁队列
Status DestoryQueue(LinkQueue &Q){
while(Q.front){
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
}
//入队
Status EnQueue(LinkQueue & Q, QElemtype e){
//生成一个结点
QueuePtr p = (QueuePtr)malloc(sizeof(QElemtype));
if(!p) return false;
p->data = e; p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return true;
}
//出队
Status DeQueue(LinkQueue & Q, QElemtype &e){
if(Q.front==Q.rear) return false;
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p){
Q.rear = Q.front;
}
free(p);
return true;
}
int main(int argc, char** argv) {
// QElemtype e;
// LinkQueue q;
// InitQueue(q);
// EnQueue(q,1);
// EnQueue(q,2);
// EnQueue(q,3);
// DeQueue(q,e);
// cout<<e<<endl;
// DeQueue(q,e);
// cout<<e<<endl;
return 0;
}