链表模拟队列quene---C语言
1、链表分为带头结点、不带头结点两种;
2、头结点的数据域不存放数据;
3、链表增加头结点的原因:使往第一个位置插入和删除元素的操作和其他位置一样;
4、常见的会考到:
①手写链表、
②实现链表的创建(插入、删除、摧毁、逆序等)操作、
③链表模拟栈、
④链表模拟队列、
⑤判断链表是否成环、
⑥判断两个链表是否交叉
不带头结点的链表模拟堆quene:
/********************************************************************************** Copyright: (C) 2018 Yujie* All rights reserved.** Filename: linker_quene.c* Description: This file * * Version: 1.0.0(08/27/2018)* Author: yanhuan <yanhuanmini@foxmail.com>* ChangeLog: 1, Release initial version on "08/27/2018 12:47:42 PM"* ********************************************************************************/#include <stdio.h>
#include <string.h>
#include <malloc.h>typedef struct node
{int data;struct node *next;
}NODE_t,*NODE_p;typedef struct quene //先进后出
{struct node *front; //队首struct node *rear; //队尾
}quene_t,*quene_p;quene_p create_linker_quene(quene_p que) //以无头结点为基础
{int length,n = 1;NODE_p Np_now = NULL;que->front = NULL;que->rear = NULL;printf("Please input the init length of quene you want to creat : \n");scanf("%d",&length);while(n <= length){NODE_p s = (NODE_p)malloc(sizeof(NODE_t));printf("Please input the No.%d num : ",n);scanf("%d",&s->data);s->next = NULL;if(1 == n){Np_now = s;que->front = Np_now;que->rear = Np_now;}else{Np_now->next = s;Np_now = s;que->rear = Np_now;}n++;}return que;
}quene_p insert_quene(quene_p que,int data) //只能从队尾插入
{NODE_p s = (NODE_p)malloc(sizeof(NODE_t));s->data = data;s->next = NULL;if(NULL == que->front){que->front = s;que->rear = s;}else{que->rear->next = s;que->rear = s;}printf("Insert data:%d successful\n",s->data);return que;
}quene_p delete_quene(quene_p que)
{NODE_p Np_now = que->front;if(NULL == Np_now){printf("The quene has no element\n");return que; }if(Np_now == que->rear){que->front = NULL;que->rear = NULL;printf("Delete data:%d successful\n",Np_now->data);return que;}que->front = que->front->next;printf("Delete data:%d successful\n",Np_now->data);free(Np_now);return que;
}quene_p destory_quene(quene_p que)
{NODE_p Np_now = que->front;while(Np_now != NULL){que->front = que->front->next;free(Np_now);Np_now->next = NULL;Np_now = que->front;}que->front = NULL;que->rear = NULL;printf("Destory finished\n");return que;
}void travel(quene_p que)
{int n = 1;NODE_p Np_now = que->front;if(Np_now == NULL){printf("The quene has no element\n");return ;}while(Np_now != NULL){printf("The NO.%d data of quene is %d\n",n,Np_now->data);Np_now = Np_now->next;n++;}printf("Travel finished\n\n");
}void print_desc_main()
{printf("Please input the selection number you want:\n");printf("1 create quene \n");printf("2 insert quene node \n");printf("3 delete quene node \n");printf("4 travel quene \n");printf("5 destory quene \n");printf("6 exit \n");
}void print_desc_insert()
{printf("what do you want to insert:\n");
}int main (int argc, char **argv)
{int i=0,data;quene_t quene_n;quene_p que = (quene_p)&quene_n;que->front = NULL;que->rear = NULL; // que = create_linker_quene(que);while(1){print_desc_main();scanf("%d",&i);switch(i){case 1:if(que->front == NULL){que = create_linker_quene(que);}elseprintf("The quene is exist\n");break;case 2:print_desc_insert();scanf("%d",&data); que = insert_quene(que,data);break;case 3:que = delete_quene(que);break;break;case 4:travel(que);break;case 5:que = destory_quene(que);break;case 6:que = destory_quene(que);printf("Quit \n");return 0;default:printf("Incorrect input\n");print_desc_main(); break;}}return 0;
}
带头结点的就更加简单一点,在这里就不贴代码了。
链表模拟队列quene---C语言相关推荐
- 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...
- C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例
C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...
- Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP
单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...
- 实现一个通用的生产者消费者队列(c语言版本)
背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定的生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观, ...
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
- C day18 高级数据表示(链表,队列)
这是C primer的最后一章了,前面已经学习了怎么创建变量,结构,数组,指针,会写函数,总之,把C作为工具层面的知识已经学完了,但是对于编程之路,这才算走完第一步,因为对于写程序最重要的是学习如何表 ...
- 数据结构与算法——队列( Quene )
队列( Quene ) 队列是一个有序列表,可以用数组或是链表来实现 遵循先入先出的原则.即:先存入队列的数据,要先取出.后存入的要后取出 1 数组模拟队列 队列本身是有序列表 因为队列的输出.输入是 ...
- (数据结构与算法)数组模拟队列和环形队列
文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...
- 数组模拟队列(代码实现)
数据结构可分为两种,第一种是线性结构,第二种是非线性结构,线性结构又分为连续存储和链表存储. 常见的线性结构有数组,链表,队列,栈: 以下是数组模拟队列的实现(队列特点就是先进先出): //数组模拟队 ...
最新文章
- 自己理解接口回调入门
- 卷积神经网络模型如何辨识裸体图片
- 全球及中国LCP行业应用项目布局及产能规模预测报告2021版
- JavaScript教程——JavaScript 的基本语法(标识符)
- jQuery设计动画
- 1.文档数据非结构化
- 不懂函数能学c语言吗,不会函数能学C语言吗
- Java 程序员最爱 Kotlin?
- 快手发布营销平台:以短视频社交广告为切入点 商业化提速
- idea exclude from compile 再加回来
- 【书籍推荐】深入解析Windows操作系统(第4版)
- 【zhasite】托业英语阅读技巧有哪些
- Bootstrap-table 如何合并相同单元格
- SOT23(Small Outline Transistor)
- kali linux实体机_kali linux系统安装之物理机的详细安装步骤
- office显示“你的许可证并非正版....”
- Blackhat 2017Defcon 25学习笔记
- c语言基础知识(知识点较为完整)
- 模拟角频率和数字角频率
- 【Codeforces Round #514 (Div. 2) D. Nature Reserve】 三分+推公式