C语言《数据结构》——链式队列

简介: C语言《数据结构》——链式队列

前言


链式队列----用链表实现,链式队列就是一个操作受限的单向链表;

提示:以下是本篇文章正文内容,下面案例可供参考


一、队列初始化;


LinkQueue* Init_LinkQueue()
{
LinkQueue* ps = (LinkQueue*)malloc(sizeof(LinkQueue));
ps->frontNode = ps->tailNode = NULL;
ps->cursize = 0;
return ps;
}


二、代码实现;


1.入队


6531ce2887166f5fe8f3109f5b662229_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码如下(示例):


void pushQueue(LinkQueue* ps, elemstyle data)
{
  assert(ps != NULL);
  Node* newnode = creatNode(data);
  if (ps->cursize == 0)
  {
  ps->frontNode = ps->tailNode=newnode;
  }
  else
  {
  ps->tailNode->next = newnode;
  ps->tailNode == newnode;
  }
  ps->cursize++;
}


2.出队


代码如下(示例):


737edb43b8aa79276d5357050857026b_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


int popLinkQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  if (ps->cursize == 0)
  {
  printf("队列为空,出队失败;\n");
  }
  else
  {
  Node* nextNode = ps->frontNode->next;
  free(ps->frontNode);
  ps->frontNode = nextNode;
  ps->cursize--;
  //return *item;
  }
}
//获取队头元素;
int getfrontQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  elemstyle item;
  if (ps->frontNode != NULL)
  {
  item = ps->frontNode->data;
  printf("%5d\n", item);
  }
  //获取队头元素是不用删除结点的;
}


3.源代码实现:


该处使用的url网络请求的数据。


//链式队列;
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
#include<assert.h>
#define maxsize 5
#define true 2
#define false -2
#define ok 1
#define erro -1
typedef int elemstyle;
typedef struct node 
{
  elemstyle data;
  struct node* next;
}Node;
typedef struct queue 
{
  Node* frontNode;
  Node* tailNode;
  int cursize;
}LinkQueue;
//创建结点;
Node* creatNode(elemstyle data)
{
  Node* newnode = (Node*)malloc(sizeof(Node));
  newnode->data = data;
  newnode->next = NULL;
  return newnode;
}
//链表的初始化;
LinkQueue* Init_LinkQueue()
{
  LinkQueue* ps = (LinkQueue*)malloc(sizeof(LinkQueue));
  ps->frontNode = ps->tailNode = NULL;
  ps->cursize = 0;
  return ps;
}
//入队;
void pushQueue(LinkQueue* ps, elemstyle data)
{
  assert(ps != NULL);
  Node* newnode = creatNode(data);
  if (ps->cursize == 0)
  {
  ps->frontNode = ps->tailNode=newnode;
  }
  else
  {
  ps->tailNode->next = newnode;
  ps->tailNode == newnode;
  }
  ps->cursize++;
}
//出队;
int popLinkQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  if (ps->cursize == 0)
  {
  printf("队列为空,出队失败;\n");
  }
  else
  {
  Node* nextNode = ps->frontNode->next;
  free(ps->frontNode);
  ps->frontNode = nextNode;
  ps->cursize--;
  //return *item;
  }
}
//判空;
int emptyLinkQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  if (ps->cursize == 0)
  {
  return true;
  }
  else
  {
  return false;
  }
}
//获取队头元素;
int getfrontQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  elemstyle item;
  if (ps->frontNode != NULL)
  {
  item = ps->frontNode->data;
  printf("%5d\n", item);
  }
  //获取队头元素是不用删除结点的;
}
//获取队列长度;
void lengthQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  printf("队列的长度为:%5d\n", ps->cursize);
}
//队列打印函数;
void printQueue(LinkQueue* ps)
{
  assert(ps != NULL);
  //elemstyle item;
  if (ps->cursize = 0)
  {
  printf("链表为空,无法打印;\n");
  return;
  }
  while (ps->cursize != 0)
  {
  //获取队头元素;
  getfrontQueue(ps);
  //出队;
  popLinkQueue(ps);
  }
}
//调试函数;
int main(void)
{
  LinkQueue *ps;
  elemstyle item;
  //队列初始化;
  ps=Init_LinkQueue();
  int data;
  for (int i = 0; i < maxsize; i++)
  {
  scanf("%d", &data);
  pushQueue(ps, data);
  }
  //获取队头元素;
  printf("队头元素为:");
  getfrontQueue(ps);
  //获取队列长度;
  lengthQueue(ps);
  //队列打印函数;
     printQueue(ps);
}
相关文章
|
14天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
90 9
|
28天前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
|
13天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
56 16
|
13天前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
62 8
|
16天前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
44 4
|
17天前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
49 3
|
17天前
|
存储 算法 C语言
C语言数据结构(2)
【10月更文挑战第21天】
|
28天前
|
存储 算法 C语言
【趣学C语言和数据结构100例】
《趣学C语言和数据结构100例》精选5个编程问题,涵盖求最大公约数与最小公倍数、字符统计、特殊序列求和及阶乘计算等,通过实例讲解C语言基础与算法思维,适合初学者实践学习。
|
1月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
19 2
|
16天前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
37 0

热门文章

最新文章