队列的建立,插入,删除和打印!
#include <iostream>
using namespace std;
//
typedef struct student
{
int data;
student* next;
}node;
typedef struct linkqueue
{
node *first,*rear;
linkqueue()
{
first = rear = NULL;
}
}queue;
//插入在队列的尾部
queue *insert(queue *HQ,int x)
{
node *s; //创建新的节点
s = new node();
s->data = x;
s->next = NULL;
if (HQ->rear == NULL) //第一次创建时,队列为空
{
HQ->first = s;
HQ->rear = s;
}
else
{
HQ->rear->next = s;
HQ->rear = s;
}
return HQ;
}
queue *del(queue *HQ) //删除节点
{
node *p = NULL;
int x;
if (HQ->first == NULL) //为空队列,打印溢出
{
printf("\n 溢出\n");
}
else
{
x = HQ->first->data;
p = HQ->first;
if (HQ->first == HQ->rear) //
{
HQ->first = NULL;
HQ->rear = NULL;
}
else
{
HQ->first = HQ->first->next;
free(p);
}
}
return (HQ);
}
int length(queue *HS) //计算队列的长度
{
int n = 0;
node *p = HS->first;
if (p == NULL)
{
printf("queue is empty!\n");
return false;
}
while(p != NULL)
{
p = p->next;
n++;
}
return n;
}
queue * print(queue *HQ) //打印队列
{
node * pTemp = HQ->first;
if (pTemp == NULL)
{
printf("queue is empty!");
}
while(pTemp != NULL)
{
printf("%d\n",pTemp->data);
pTemp = pTemp->next;
}
return HQ;
}
void main()
{
queue *HQ;
HQ = new queue();
HQ = insert(HQ,1);
HQ = insert(HQ,2);
HQ = insert(HQ,3);
HQ = insert(HQ,4);
HQ = insert(HQ,5); //给队列中插入5个元素
print(HQ); //打印队列
cout<<"************************************ "<<endl;
HQ = del(HQ); //删除队列
HQ = print(HQ); //打印删除后的队列
cout<<"************************************"<<endl;
cout<<length(HQ)<<endl; //输出//删除后队列的长度
system("pause");
}
运行的结果: