数据结构之队列的链式存储及其实现

本文详细介绍了链队列的实现方法,包括初始化、销毁、清空队列、元素的入队和出队等核心操作,并提供了具体的C语言代码示例。

链队列:用链表表示的队列。
一个链队列需要两个分别表示队头和队尾的指针,为了方便在我们给链队列加入一个头指针 并且头指针指向头结点。
链队列示意图以及队列指针运算变化情况

#include<iostream>
#include<cstdio>
#define false 0
#define ok 1
using namespace std;
typedef struct qnode{
  int data;
  struct qnode *next;
}qnode,*qnodeptr;
typedef struct{
  qnodeptr front;
  qnodeptr rear;
}linkqueue;
//销毁队列 注意:销毁队列需要删除头结点
void destroyqueue(linkqueue &q){
  while(q.front){
    q.rear=q.front->next;
    free(q.front);
    q.front=q.rear;
  }
}
//清空队列。注意:清空队列不需要删除头结点,但是需要将头结点进行置0操作
void clearqueue(linkqueue &q){
  q.rear=q.front->next;//让头指针指向第一个值
  while(q.rear){
    q.front->next=q.rear->next;//更新头结点指向的地方
    free(q.rear);//释放内存
    q.rear=q.front->next;//更新队尾的位置
  }
}
//建立一个空的队列
int initqueue(linkqueue &q){
    q.front=q.rear=(qnodeptr)malloc(sizeof(qnode));
    if(!q.front){
      return false;
    }
    q.front->next=NULL;
    return ok;
}
//向队列中输入元素
void cin_queue(linkqueue &q,int n){
  for(int i=1;i<=n;i++){
    q.rear=(qnodeptr)malloc(sizeof(qnode));
    cin>>q.rear->data;//输入数据
    q.front->next=q.rear;//将数据插入到队头的后面
    q.rear=q.rear->next;
  }
}
//输出队列中现有的元素
void cout_queue(linkqueue &q){
  while(q.front->data!=0){
    cout<<q.front->data<<" ";
    q.front=q.front->next;
  }
  cout<<endl;
}
//向队尾添加元素
int enqueue(linkqueue &p,int e){
  qnodeptr q;
  q=(qnodeptr)malloc(sizeof(qnode));
  if(!q){
    return false;
  }
  q->data=e;
  q->next=NULL;
  p.rear->next=q;//让他的下一个为q
  p.rear=q;//然后q当最后一个
  return ok;
}
//删除队头元素
int dequeue(linkqueue &q,int &e){
  if(q.front==q.rear){
    return false;
  }
  qnodeptr p;
  p=q.front->next;//指向队头元素。注意:q.front带有头结点
  e=p->data;//输出队头元素的值
  q.front->next=p->next;//更新队头元素的位置
  return ok;
}
int main(int argc, char const *argv[]) {
  linkqueue q;
  int e=0;
  cout<<endl;
  initqueue(q);
  cout<<endl;
  cin_queue(q,3);
  enqueue(q,11);
  dequeue(q,e);
  cout<<e<<endl;
  cout_queue(q);
  return 0;
}

注意:需要插入三个数据进行计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值