如何创建队列及入队出队

创建队列及入队出队

1.首先我们来了解什么是队列,在现实生活中我们都排过队取票吧,排在最前面的是不是可以最先完成取票离开,而后来则需要在队尾继续排队呢,在数据结构中队列就是一种先进先出 只在一头入队另一头出队的存储结构 队列也有数组及链式两中结构,而我们今天学习的就是创建链式队列
用图来让我们更直观的了解队列吧
在这里插入图片描述
每个队列都包含了一个两个指针 一个指向队头,一个指向队尾
让我们用代码直观的写出队列:
1.首先创建结构体变量

 struct Node
 { 
     int data;
     struct Node* next;
 };

2.接下来创建将要入队的结点

sturct Node* creatNode(data)
{ 
  // 将指针-> 变量  动态内存申请
  struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
  //初始化结点
  newNode->data=data;
  newNode->next=NULL;
  return newNode;
}

3.创建完结点后来创建队列结构体

struct Queue
{
   struct Queue* frontNode   //队头指针
   struct Queue* tailNode   //队尾指针
   int size;                //队列长度 
};

4-创建完队列结构体之后来创建队列

struct Queue* creatQueue()
{
   //创建队就是创建一个队列的结构体变量
   //通过动态内存申请将指针变为变量
   struct Queue* myQueue=(struct Queue*)malloc(sizeof(struct Queue));
   //初始化队列
   myQueue->frontNode=myQueue->tailNode=NULL;
   myQueue->size=0;   //刚创建队列长度为0
   return myQueue;
}

5.队列的创建也已经基本完成了现在来对队列进行操作
入队(尾插法):

void push(struct Queue* myQueue,int data)
{  
  //首先判断队列长度是否为0
 if(myQueue->size == 0)
 {
  myQueue->frontNode=myQueue->tailNode=newNode;
 }
 else
 {
     //调用创造结点函数创造将要插 入的新结点
	 struct Node* newNode=creatNode(data);
 	 myQueue->frontNode->next=newNode; //尾结点指针指向新结点	
	 myQueue->frontNode=newNode;   //队尾指针后移
  }
   myQueue->size++;    //队元素加一
}

6.获取队首元素

int top(struct Queue* myQueue)
{
  if(myQueue->size==0)
  {
    printf("队列为空,无法获取队首元素\n");
    system("pause");
    return myQueue->size; //输出队列长度0
  }
  return myQueue->frontNode->next;  //输出首元素
 }

7.出队(表头删除法)

void pop(struct Queue* myQueue)
{
  //首先判断队列是否为空,若为空则无法出队
  if(myQueue->size == 0)
  {
    printf("队列为空,无法出队\n");
    system("pause");
    return;
  }
  else
  { 
    //首先找到第二个元素,第一个元素出队后第二个元素称为首结点
   struct Node* nextNode=myQueue->frontNode->next;
   free(myQueue->frontNode);
   myQueue->frontNode=nextNode;  //首指针指向第二个结点
   myQueue->size--;    //队列元素减一
  }
}

8.再写一个判断队列是否为空的函数,在我们写栈和队列时都可以用到,又叫做万金油函数

int empty(struct Queue* myQueue)
{
    if(myQueue->size == 0)
       return 0;
    else
       return 1; 
}

9.测试程序

int main()
{
   //首先创建出队列
   struct Queue* myQueue = creatQueue();
   //入队
   push(myQueue,5);
   push(myQueue,2);
   push(myQueue,1);
   while(empty(myQueue))
   {
     printf("%d  ",top(myQueue));
     pop(myQueue);    //不停的出队 打印出队列所有元素
   }
   printf("\n");
   system("pause");  //防止闪屏  
   return 0;
}

在这里插入图片描述
到这里队列的创建及操作也就结束了,博主也是一个小白,有不正确的地方还希望大家指出嘿嘿

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值