做一个豁达而努力的自己。
链栈节点的存储结构:
typedef struct QNode
{
int data; //存储数据
QNode *next; //下一个节点的指针地址
}QNode;
链栈的存储结构:
typedef struct
{
QNode *front; //头指针
QNode *rear; //尾指针
}LinkQueue;
入队:
Status EnQueue(LinkQueue &q, int e)
{
QNode *s;
s = new QNode;
if(!s)
return ERROR;
s->data = e;
s->next = NULL;
q.rear->next = s;
q.rear = s;
return OK;
}
出队:
Status DeQueue(LinkQueue &q, int &e)
{
if(q.front == q.rear)
return ERROR;
QNode *p;
p = q.front->next;
e = p->data;
q.front->next = p->next;
if(q.rear == p)
q.reat = q.front;
delete p;
return OK;
}
代码:
#include <iostream>
using namespace std;
//队列节点的存储结构
typedef struct QNode
{
int data; //存储数据
QNode *next; //下一个节点的地址指针
}QNode;
//队列的存储结构
typedef struct
{
QNode *front; //头指针
QNode *rear; //尾指针
}LinkQueue;
//队列的初始化
bool InitQueue(LinkQueue &q)
{
q.front = q.rear = new QNode;
if(!q.front)
return false;
q.front->next = NULL;
return true;
}
//入队
bool EnQueue(LinkQueue &q, int e)
{
QNode *s;
s = new QNode; //创建一个节点
if(!s)
return false;
s->data = e;
s->next = NULL;
q.rear->next = s;
q.rear = s;
return true;
}
//出队
bool DeQueue(LinkQueue &q, int &e)
{
if(q.front == q.rear)
return false;
QNode *p;
p = q.front->next;
e = p->data;
q.front->next = p->next;
if(q.rear == p)
q.rear = q.front;
delete p;
return true;
}
//打印队列
void PrintQueue(LinkQueue q)
{
QNode *p;
p = q.front->next;
while(p)
{
cout << p->data << '\t';
p = p->next;
}
cout << endl;
}
//销毁队列
void DestroyQueue(LinkQueue &q)
{
while(q.front)
{
q.rear = q.front->next;
delete q.front;
q.front = q.rear;
}
}
//清除队列
void ClearQueue(LinkQueue &q)
{
QNode *p, *s;
p = q.front->next;
while(p)
{
s = p;
delete s;
p = p->next;
}
q.rear = q.front;
q.front->next = NULL;
}
//判断队列是否为空
bool EmptyQueue(LinkQueue q)
{
if(q.front == q.rear)
return true;
return false;
}
//求对头元素
bool GetHead(LinkQueue q, int &e)
{
if(q.front == q.rear)
return false;
e = q.front->next->data;
return true;
}
int main()
{
LinkQueue q;
InitQueue(q);
int e;
cout << "输入5个元素:" << endl;
for(int i = 1; i < 6; i++)
{
cin >> e;
EnQueue(q, e);
}
PrintQueue(q);
cout << "删除一个元素" << endl;
DeQueue(q, e);
PrintQueue(q);
GetHead(q, e);
cout << "输出对头元素:" << e << endl;
cout << "销毁队列" << endl;
ClearQueue(q);
cout << "销毁成功" << endl;
return 0;
}