数据结构---栈和队列之链队(C语言)

原创 2018年04月16日 14:51:29

链队就是采用链式存储结构存储队列,这里采用单链表来实现。链队的特点是不存在队列满上溢的情况(这里也不太严格,内存满了就上溢了,但是一般内存是不会满的)。
----------------------------------------------------------------------------------------------------------------------------------

完整代码如下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/***************队结点定义*************/
typedef struct QNode
{
 int data;   //数据域
 struct QNode *next;
}LQNode;
/***************链队类型定义***********/
typedef struct
{
 LQNode *front;   //队首指针
 LQNode *rear;    //队尾指针
}LiQueue;
LiQueue *lqu;
/****************初始化链队**************/
void initQueue()
{
 lqu = (LiQueue*)malloc(sizeof(LiQueue));
 lqu->front = lqu->rear = NULL;
}
/***************判断队空*****************/
int isQueueEmpty()
{
 if (lqu->front == NULL || lqu->rear == NULL)
  printf("队空");
 else
  printf("队不空");
}

/******************入队*******************/
int count = 0;   //输入了多少数据计数
void enQueue()
{
 LQNode *p; 
 printf("请输入数据,按回车键结束!\n");
 printf("入队数据顺序为:\n");
 while (1)
 {
  p = (LQNode*)malloc(sizeof(LQNode));
  scanf_s("%d", &p->data);
  count++;
  
  p->next = NULL;
  if (lqu->rear == NULL)
   lqu->front = lqu->rear = p;   //若队列为空,则新节点是队首结点也是队尾结点
  else
  {
   lqu->rear->next = p;   //将新结点链接到队尾,rear指向它
   lqu->rear = p;
  }
  char c = getchar();
  if (c == '\n')
   break;
 }
 return lqu;
}
/********************出队*******************/
int deQueue()
{
 LQNode *p;
 printf("\n出队数据顺序为:");
 for (int i = 0; i < count; i++)
 {
  if (lqu->rear == NULL)   //队空不能出列
   return 0;
  else
   p = lqu->front;
  if (lqu->front == lqu->rear)   //队列中只有一个结点时的出队操作需要特殊处理
  {
   lqu->front = lqu->rear = NULL;
   printf("%d  ", p->data);
   free(p);
  }   
  else
  {
   lqu->front = lqu->front->next;
   printf("%d  ", p->data);
   free(p);
  }  
 } 
 return 1;
}
int main()
{
 initQueue();
 isQueueEmpty();
 enQueue();
 deQueue();
 system("pause");
}
结果图:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lu_LLLR/article/details/79960527

C语言数据结构-链队列

链队列链队列与链表相似,不同的是它具有对列的运算方法,存储结构和链表相同,下面是其结构示意图:这里的*Q类似于链表的头节点*head;它包含两个指向队列节点的指针front和rear;当front和r...
  • ahafg
  • ahafg
  • 2015-10-11 16:33:42
  • 1513

[栈及队列的操作]数据结构实验报告C语言源码

  • 2015年07月05日 10:26
  • 53KB
  • 下载

栈和队列(C语言版)

栈和队列是在程序中最常被用到的数据结构,其重要性不言而喻。栈: 定义:限定仅在表尾进行插入和删除操作的线性表,因此表尾称之为栈顶,表头为栈底,重要特点是后进先出(LIFO)操作: InitStack...
  • wqc_CSDN
  • wqc_CSDN
  • 2016-02-18 00:21:35
  • 3720

数据结构与算法分析(二) —— 关于表、栈和队列的深入探讨

本文讨论三种最简单的数据结构,也是抽象数据类型(ADT)的最基本的例子:表、栈和队列。1、ADTADT即带有一组操作的一些对象的集合。诸如表、集合、图以及它们与各自的操作一起形成的这些对象都可以被看做...
  • lipengcn
  • lipengcn
  • 2016-05-20 10:26:54
  • 1054

数据结构的几个程序顺序栈,链式栈,顺序队,链式队,排序

  • 2010年12月02日 09:08
  • 7KB
  • 下载

数据结构之---C语言实现链式队列

//链式队列的存储 //杨鑫 #include #include typedef int QElemType; //定义节点 typedef struct QNode { QElemType...
  • u012965373
  • u012965373
  • 2015-05-19 20:54:57
  • 2758

C语言 数据结构 栈和队列 顺序栈(栈的顺序存储结构)

//C语言--数据结构--栈和队列  顺序栈(栈的顺序存储结构) #include #include #include  #include #include #includ...
  • qq_34814092
  • qq_34814092
  • 2017-06-11 20:58:00
  • 374

数据结构C语言实现栈和队列的基本操作

  • 2010年12月12日 18:06
  • 1KB
  • 下载

链队的常用操作(C语言)

  • 2013年10月19日 11:17
  • 3KB
  • 下载

数据结构(严蔚敏)之六——链式队列c语言实现

实验: 编写一个程序实现链队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化并建立链队列 (2)入链队列 (3)出链队列 (4)遍历链队列   分析: 队列的...
  • GreenHandCGL
  • GreenHandCGL
  • 2015-04-02 23:45:13
  • 1545
收藏助手
不良信息举报
您举报文章:数据结构---栈和队列之链队(C语言)
举报原因:
原因补充:

(最多只允许输入30个字)