返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现链队列基本操作
  • 126
分享到

C语言实现链队列基本操作

2024-04-02 19:04:59 126人浏览 泡泡鱼
摘要

队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制。 头文件声明 #include <stdio.h> #include <stdlib.

队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制。

头文件声明


#include <stdio.h>
#include <stdlib.h>


//数据类型
typedef int ElemType;

//定义节点
typedef struct SqQueuenode
{
 ElemType data;//数据域
 struct SqQueueNode* next; //指针域
}SqQueueNode;
//定义队列
typedef struct SqQueueLink{
 SqQueueNode* front;//队头指针
 SqQueueNode* rear;//队尾指针
}SqQueueLink;

//初始化队列
void InitQueueLink(SqQueueLink* q);
//判断队空
int EmptyQueueLink(SqQueueLink q);
//入队操作
void EnQueueLink(SqQueueLink *q,ElemType e);
//出队操作
void DeQueueLink(SqQueueLink q,ElemType *e);
//获取队列长度
int LengthQueueLink(SqQueueLink q);
//打印队列
void printSqQueueLink(SqQueueLink q);
//获取队头元素
void GetHeadLink(SqQueueLink q,ElemType* e);

函数实现


#include "SqQueueLink.h"


//初始化队列
void InitQueueLink(SqQueueLink* q){
 //创建头结点
 SqQueueNode* pNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 pNode->next=NULL;//指针域置空[数据域不存储任何内容]
 //初始化队列-[使队头指针和队尾指针指向头结点]
 q->front=pNode;
 q->rear=pNode;
}

//判断队空
int EmptyQueueLink(SqQueueLink q){
 return q.front==q.rear;
}

//入队操作
void EnQueueLink(SqQueueLink *q,ElemType e){
 //创建新的数据元素节点
 SqQueueNode* newNode=(SqQueueNode*)malloc(sizeof(SqQueueNode));
 newNode->data=e;//指定数据域
 newNode->next=NULL;//指针域置空
 //入队操作[从队尾入队]
 q->rear->next=newNode;
 q->rear=newNode;
}

//出队操作
void DeQueueLink(SqQueueLink q,ElemType *e){
 //[从队头出队]
 SqQueueNode* p=NULL;
 //是否队空
 if (q.front==q.rear)
  return;
 p=q.front->next;//获取首节点
 *e=p->data;
 //使队头指针指向下一节点
 q.front->next=p->next;
 //如果原队列中只有一个节点,要将队尾指针和队头指针均指向同一节点-置空
 if (q.rear==p)
  q.rear=q.front;
 //释放原首节点
 free(p);
}

//获取队列长度
int LengthQueueLink(SqQueueLink q){
 //辅助指针
 SqQueueNode* pNode=q.front->next;
 int count=0;
 //获取队列长度
 while (pNode!=q.rear)
 {
  count++;
  pNode=pNode->next;
 }
 return count;
}

//打印队列
void printSqQueueLink(SqQueueLink q){
 //辅助指针
 SqQueueNode* p=q.front->next;
 while (p!=q.rear)
 {
  printf("%4d",p->data);
  p=p->next;
 }
 printf("\n");
}

//获取队头元素
void GetHeadLink(SqQueueLink q,ElemType* e){
 //判断队列是否为空
 if (q.front==q.rear)
  return;
 //获取队头元素的值
 *e=q.front->next->data;
}

函数测试


#include "SqQueueLink.h"

int main(int arGC,char** argv){
 //声明队列
 SqQueueLink sqlink;
 int i;
 ElemType data;
 //初始化队列
 InitQueueLink(&sqLink);
 //判断队列是否为空
 printf("is Empty?%d\n",EmptyQueueLink(sqLink));
 //入队操作
 for (i=0;i<=20;i++)
 {
  EnQueueLink(&sqLink,i+1);
 }
 //判断队列是否为空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印队列
 printSqQueueLink(sqLink);
 //出队列操作
 DeQueueLink(sqLink,&data);
 //判断队列是否为空
 printf("is Empty?%d,len=%d\n",EmptyQueueLink(sqLink),LengthQueueLink(sqLink));
 //打印队列
 printSqQueueLink(sqLink);
 //获取队头元素的值
 GetHeadLink(sqLink,&data);
 printf("the first node value is %d\n",data);
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现链队列基本操作

本文链接: https://lsjlt.com/news/136503.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言实现链队列基本操作
    队列的链式存储结构实现,相比于循环队列实现要复杂一些,但是没有队满的限制。 头文件声明 #include <stdio.h> #include <stdlib....
    99+
    2024-04-02
  • C语言实现循环队列基本操作
    循环队列依靠取模运算,实现队列中数据元素的逻辑成环操作。其相比队列的顺序存储实现,可以避免“假溢出”的问题。 头文件声明 #include <stdio.h> #in...
    99+
    2024-04-02
  • C语言数据结构之链队列的基本操作
    目录1.队列的定义2.队列的表示和实现(1)初始化操作(2)销毁队列(3)入队操作(4)出队操作附录完整代码:总结1.队列的定义 队列 (Queue)是另一种限定性的线性表,它只允许...
    99+
    2024-04-02
  • Go语言实现栈与队列基本操作学家
    目录一、前言二、实现栈与队列基本操作2.1 栈基本操作2.2 队列基本操作三、用栈实现队列3.1 理论3.2 算法题3.3 思路3.4 代码部分四、用队列实现栈4.1 理论4.2 算...
    99+
    2022-11-16
    Go语言栈 队列操作 Go语言 栈 Go语言 队列
  • ​​​​​​​C语言实现单链表基本操作方法
    目录存储结构基本功能头插法创建单链表尾插法创建单链表获取指定位置的元素在指定位置插入元素删除指定位置的元素获取单链表的长度合并两个非递减的单链表晴链表遍历打印单链表附上完整代码存储结...
    99+
    2024-04-02
  • C语言数据结构中链队列的基本操作是怎样的
    这篇文章将为大家详细讲解有关C语言数据结构中链队列的基本操作是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.队列的定义队列 (Queue)是另一种限定性的线性表,它只允许在表的一端...
    99+
    2023-06-22
  • C语言实现单链表的基本操作分享
    目录导语单链表单链表的特点定义初始化操作头插法尾插法删除第i个元素在第i个位置插入导语 无论是顺序存储结构还是链式存储结构,在内存中进行存放元素的时候,不仅需要存放该元素的相关信息,...
    99+
    2022-11-13
    C语言单链表基本操作 C语言单链表
  • C语言链式队列与循环队列怎么实现
    这篇文章主要介绍了C语言链式队列与循环队列怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言链式队列与循环队列怎么实现文章都会有所收获,下面我们一起来看看吧。队列的实现队列是一种先进先出(First ...
    99+
    2023-06-30
  • C语言中双链表的基本操作
    目录带头结点的双向循环链表基本操作创建销毁打印尾插法尾删头插头删查找元素位置任意位置插入任意位置删除完整代码及测试总结带头结点的双向循环链表 链表结构如下: 每个节点都有一个数据域和...
    99+
    2023-02-05
    C语言双链表 双链表的基本操作 C语言双链表操作
  • C语言详解链式队列与循环队列的实现
    目录队列的实现链式队列链式队列的定义链式队列的实现循环队列循环队列的定义循环队列的实现队列的实现 队列是一种先进先出(First in First Out)的线性表,简称FIFO。与...
    99+
    2024-04-02
  • C语言如何实现一个链表队列
    本篇内容主要讲解“C语言如何实现一个链表队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现一个链表队列”吧!C语言数据结构链表队列的实现1.写在前面  队列是一种和栈相反的,遵循先...
    99+
    2023-06-16
  • python队列基本操作和多线程队列
    目录一、队列基本操作二、多线程队列一、队列基本操作 from queue import Queue q = Queue(5)  # 创建一个容量为5的队列。如果给一个小于0的数,则...
    99+
    2024-04-02
  • C语言队列怎么实现
    今天小编给大家分享一下C语言队列怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。队列的实现基本概念队列:只允许在一端进...
    99+
    2023-06-29
  • C语言如何实现队列
    这篇文章主要介绍了C语言如何实现队列的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现队列文章都会有所收获,下面我们一起来看看吧。一. 什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端...
    99+
    2023-07-02
  • C语言如何实现单链表操作
    本篇内容介绍了“C语言如何实现单链表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 链表的概念及结构概念:链表是一种物理存储结构上非连...
    99+
    2023-06-29
  • C语言中单链表(不带头结点)基本操作的实现详解
    目录一、单链表的概念二、单链表的基本操作1.创建单个结点2.创建具有n个结点的链表3.打印单链表4.尾插5.尾删6.头插7.头删8.查找某个结点9.在某个结点后面插入10.在某个结点...
    99+
    2022-11-16
    C语言单链表操作 C语言单链表
  • python队列的基本操作示例
    这篇文章给大家分享的是有关python队列的基本操作示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语...
    99+
    2023-06-14
  • C语言数据结构堆的基本操作实现
    目录1.基本函数实现a.代码1(向下调整)b.代码2(向上调整)c.代码3(交换)2.建堆 3.插入数据4. 删除数据5.获取堆顶的数据6.堆的数据个数7.判空8.打印9.销毁10....
    99+
    2024-04-02
  • C语言实现线性表的基本操作详解
    目录前言一、实训名称二、实训目的三、实训要求四、实现效果五、顺序存储代码实现六、链式存储代码实现前言 这里使用的工具是DEV C++ 可以借鉴一下 一、实训名称 线性表的基本操作 二...
    99+
    2024-04-02
  • C语言 超详细模拟实现单链表的基本操作建议收藏
    目录1 链表的概念及结构2 链表的分类3 链表的实现无头+单向+非循环链表增删查改实现3.1 链表的定义3.2 链表数据的打印3.3 链表的尾插3.4 链表空间的动态申请3.5 链表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作