#include<iostream>
using namespace std;
typedef int ElementType;
#define ERROR -1
//定义节点
typedef struct Node {
ElementType Data;
struct Node *Next;
}QNode;
//定义front和rear指针
typedef struct {
QNode *rear;
QNode *front;
}LinkQueue;
/*
出队算法:注意含有头节点
首先判断队列是否为空,若空返回-1
当队列只有一个元素时,队列的头和尾指针为NULL
其他情况从头删除节点,将头指针指向下一个位置
*/
ElementType DeleteQ(LinkQueue *PtrQ,ElementType *e)
{
QNode *Tmp;
ElementType TmpElem;
if (PtrQ->front->Next == NULL)
{
cout << "队列为空" << endl;
return ERROR;
}
Tmp = PtrQ->front->Next;
if (PtrQ->front->Next == PtrQ->rear)
PtrQ->front = PtrQ->rear = NULL;
else
{
PtrQ->front->Next = Tmp->Next;
}
*e = Tmp->Data;
cout << *e;
delete Tmp;
return 0;
}
/*
入队操作:
算法思想:首先为入队的元素分配一个新的结点,将新元素插入到队尾;
并修改队尾指针的值.
*/
ElementType AddQ(LinkQueue *PtrQ, ElementType X)
{
QNode *RearCell;
RearCell = new QNode;
if (!RearCell)
return -1;
RearCell->Data = X;
RearCell->Next = NULL;
PtrQ->rear->Next = RearCell;
PtrQ->rear = RearCell;
return 0;
}
void Inital(LinkQueue *PtrQ)
{
PtrQ->front = PtrQ->rear=new QNode;
PtrQ->front->Next = NULL;
}
int VisitQueue(LinkQueue *PtrQ)
{
if (PtrQ->front == PtrQ->rear)//如果是空队列..
{
cout << "空队列" << endl;
return ERROR;
}
QNode *p;
p = PtrQ->front->Next;//p指向队头结点
while (p)//p不为空时
{
cout << p->Data << " "<<endl;//输出p指向的结点的值
p = p->Next;//指针后移
}
return 1;
}
void main()
{
LinkQueue PtrQ;
int count,i,cell;
ElementType t;
Inital(&PtrQ);
cout << "请输入入队的元素个数:" << endl;
cin >> count;
cout << "请输入入队的元素:" << endl;
for(i=0;i<count;i++)
{
cin >> cell;
AddQ(&PtrQ, cell);
}
DeleteQ(&PtrQ,&t);
cout << "出队元素为:" << t << endl;
cout << "队列中元素为:" << endl;
VisitQueue(&PtrQ);
}
结果:
