队列的入队/出队操作

//............编程实现队列的入队/出队操作  (先进先出)
#include<iostream>
using namespace std;
//node表示队列中每个节点元素
typedef struct node
{
int data;
struct node *next;
}node;
//queue表示队列
typedef struct queue
{
node *first;  //队首
node *rear;  //队尾
}queue;
//创建空队列
queue *CreateQueue()
{
queue *q;
q = (queue*)malloc(sizeof(queue));
q->first = NULL;
q->rear = NULL; //分别将队首和队尾指针置空
return q;
}
//队列的入队,从队尾一端插入节点
queue *insert(queue *HQ,int x)
{
if(HQ== NULL)  //如果指针为NULL,返回NULL
return NULL;
node *s;
s = (node*)malloc(sizeof(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;
int x;
if(HQ->first == NULL)
      {
cout<<"Empty queue!\n";
        return 0;
}
        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);
}
}
//队列的打印
void Print(queue *HQ)
{
node *s = HQ->first ;
if(s == NULL)  //如果队列为空,直接返回
{
cout<<"Empty queue!\n";
   return ;
}
while(s != NULL)
{
cout<<s->data<<" ";
s=s->next ;
}
cout<<endl;
}

int main()
{
queue *p =NULL;
p =CreateQueue();
p =insert(p,2);
p =insert(p,3);
p =insert(p,4);
p =insert(p,5);
p =insert(p,1);
p =insert(p,9);
Print(p);

p = del(p);
p = del(p);
Print(p);
delete []p;
return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值