数据结构的队列,链表,栈的基础操作

1:队列

 #include <stdio.h>#include <stdlib.h>#include "./02队列.h"/** function:    创建一个空的队列* @param [ in] * @param [out] * @return      */Sequeue* xinduilie(){Sequeue* sq = (Sequeue*)malloc(sizeof(Sequeue));         if(NULL == sq){printf("创建失败!!!\n");}sq->front = sq->rear = 0;return sq;}/** function:    判满* @param [ in] * @param [out] * @return      */int panman(Sequeue* sq){return  (sq->rear+1)%(N+1) == sq->front ? 1:0;}/** function:    入队* @param [ in] * @param [out] * @return      */void rudui(Sequeue* sq,datatype num){if(panman(sq)){printf("插入失败,队列已满\n");return;}sq->data[sq->rear]= num;sq->rear = (sq->rear+1)%(N+1);printf("入队成功%d\n",num);                       return;}
/** function:    出队* @param [ in] * @param [out] * @return      */
void chudui(Sequeue* sq)
{if(sq->front == sq->rear){printf("队列为空!!!\n");}Sequeue* num = sq->data[sq->front];printf("出队的值为%d\n",num);sq->front = (sq->front+1)%N;return;
}
/** function:    遍历* @param [ in] * @param [out] * @return      */
void bianli(Sequeue* sq )
{for(int i=sq->front;i!=sq->rear;i=(i+1)%(N+1)){printf("%d ",sq->data[i]);}putchar(10);return;
}
/** function:    判空* @param [ in] * @param [out] * @return      */
int pankon(Sequeue* sq)
{                                              return sq->rear==sq->front ? 1:0;
}
/** function:    出队* @param [ in] * @param [out] * @return      datatype chudui(Sequeue* sq)
{if(pankon(sq) == 0){printf("出队失败,队列为空\n");}datatype num = sq->data[sq->front];sq->front - (sq->front+1)%(N+1);return num;
}
*//** function:    计算队列个数* @param [ in] * @param [out] * @return      */
datatype jisuan(Sequeue* sq)
{return (sq->rear-sq->front+N+1)%(N+1);
}

头文件:

1 #ifndef __02队列_H__2 #define __02队列_H__3 #define N 54 typedef int datatype ;5 typedef struct 6 {7     int front;8     int rear;9     datatype data[N+1];10 }Sequeue;11 Sequeue* xinduilie();//创建一个新的队列12 void rudui(Sequeue* sq,datatype num) ;//入队13 void chudui(Sequeue* sq);//出队 14 int panman(Sequeue* sq);//判满15 void bianli(Sequeue* sq );//遍历                                    16 int pankon(Sequeue* sq);//判空17 datatype jisuan(Sequeue* sq);//计算个数
#endif

主函数:

#include <stdio.h>
#include "./02队列.h"
int main(int argc, const char *argv[])
{Sequeue* sq = xinduilie();rudui(sq,20); rudui(sq,20);rudui(sq,60);rudui(sq,27);rudui(sq,29);chudui(sq);bianli(sq);printf("队列有效个数:%d\n",jisuan(sq));         return 0;
}   

结果图:

2:链式队列:

功能代码

 #include <stdio.h>#include <stdlib.h>#include "./03链式队列.h"/** function:    创建一个空的链式队列* @param [ in] * @param [out] * @return      */QueueOp* create_linkqueue(){QueueOp*  fp = (QueueOp*)malloc(sizeof(QueueOp));fp->front = (Lnkqueue*)malloc(sizeof(Lnkqueue));if(fp->front == NULL){printf("创建失败!\n");return NULL;}//初始化,下标地址及有效长度fp->front->next = NULL;fp->front->msg.len = 0;fp->rear = fp->front;printf("创建成功!\n");                               return fp;}/** function:    尾插* @param [ in] * @param [out] * @return      */
void del_list(QueueOp* head,datatype num)
{Lnkqueue* temp = (Lnkqueue*)malloc(sizeof(Lnkqueue));if(temp == NULL)                                        {printf("创建失败,节点为空\n");return;}//给链表插入值temp->msg.data = num;temp->next = NULL;temp->next = head->rear->next;head->rear->next = temp;//更新rear指向head->rear = head->rear->next;head->front->msg.len++;printf("插入成功%d\n",num);return;
}
/** function:    判空* @param [ in] * @param [out] * @return      */int isEmpty_list(QueueOp* head){                                                       return head->front == head->rear ? 1:0;}/** function:    出栈* @param [ in] * @param [out] * @return      */datatype output_list (QueueOp* head){if(isEmpty_list(head)){printf("队列为空,出队失败\n");return (datatype) -1;}Lnkqueue* temp = head->front->next;head->front->next = temp->next;datatype num = temp->msg.data;if(head->front->next == NULL){head->rear = head->front;}head->front->msg.len--;return num;free(temp);}/** function:    遍历                              * @param [ in] * @param [out] * @return      */void bianli_list(QueueOp* head){while(head->front->next != head->rear->next){head->front = head->front->next;printf("%d ",head->front->msg.data);}putchar(10);return;}

主函数

#include <stdlib.h>
#include "./03链式队列.h"
int main(int argc, const char *argv[])
{QueueOp* head = create_linkqueue();del_list(head,10);del_list(head,20);del_list(head,30);del_list(head,40);printf("%d\n",output_list(head));        bianli_list(head);return 0;
}   

头文件函数

#ifndef __03链式队列_H__
#define __03链式队列_H__typedef int  datatype;
typedef struct lnkq
{union{int len;datatype data;}msg;struct lnkq *next;
}Lnkqueue; 
//用于存储头结点尾节点地址
typedef struct 
{Lnkqueue* front;Lnkqueue* rear;
}QueueOp;QueueOp* create_linkqueue();//创建链式列表成功
void del_list(QueueOp* head,datatype num);//尾插
datatype output_list (QueueOp* head);//出栈       
void bianli_list(QueueOp* head);//遍历#endif

结果图:

3:双向链表

功能代码:

include <stdlib.h>
include <stdio.h>
include "./02双向链表.h"*
* function:    创建一个双向链表
* @param [ in] 
* @param [out] 
* @return      
*/
oublelist* lianbiao()Doublelist* twolianbiao = (Doublelist* )malloc(sizeof(Doublelist));if(NULL == twolianbiao){printf("创建失败,链表为空\n");}//初始化双向链表twolianbiao->next = NULL;twolianbiao->prev = NULL;twolianbiao->msg.len = 0;return twolianbiao;*
* function:    头插
* @param [ in] 
* @param [out] 
* @return      
*/
oid headcha(Doublelist* head,datatype num)Doublelist* temp = (Doublelist*)malloc(sizeof(Doublelist));if(NULL == temp){printf("插入失败,创建新结点失败!!!\n");}temp->msg.data = num;    //给temp赋值temp->next = head->next; //修改next指向head->next = temp;temp->prev = head;//修改prev指向if(temp->next != NULL){temp->next->prev = temp;}printf("头插入成功=%d\n",num);head->msg.len++;return;*
* function:    尾插
* @param [ in] 
* @param [out] 
* @return      
*/
oid ledcha (Doublelist* head,datatype num)Doublelist* temp =(Doublelist*)malloc(sizeof(Doublelist));temp->msg.data = num;//创建新节点并存入值temp->next = NULL;Doublelist* p = head;while(p->next != NULL){p=p->next;}temp->next=p->next;p->next = temp;//更改next的指向temp->prev = p;//更改prev的指向printf("尾插入成功=%d\n",num);head->msg.len++;return;*
* function:    头删
* @param [ in] 
* @param [out] 
* @return      
*/
oid headshan(Doublelist* head)if(head->next == NULL){printf("删除失败,链表为空!!!\n");}Doublelist* p=head;Doublelist* temp = p->next;datatype num = temp->msg.data;p->next=temp->next;//修改next的指向if(temp->next != NULL){temp->next->prev = p;}printf("删除的值=%d\n",temp->msg.data);free(temp);temp->next = NULL;head->msg.len--;*
* function:    尾删
* @param [ in] 
* @param [out] 
* @return      
*/
oid ledshan(Doublelist* head)if(head->next == NULL){printf("删除失败,链表为空!!!\n");}Doublelist* p = head;while(p->next != NULL){p = p->next;}datatype num = p->msg.data;p->prev->next = p->next;printf("删除的值=%d\n",num);free(p);head->msg.len--;return;*
* function:    判空 
* @param [ in] 
* @param [out] 
* @return      
*/
nt pankon(Doublelist* head)return  head->next == NULL ? 1:0 ;}*
* function:    中间插入
* @param [ in] 
* @param [out] 
* @return      
*/
oid middlecha(Doublelist* head,datatype num,int n)if(n<=0){printf("插入失败,插入的位置非法!!!\n");return;}Doublelist* p = head;for(int i=0;i<n-1;i++){p=p->next;printf("%d\n",head->msg.len);if(NULL == p){                                                           printf("插入位置非法!!!\n");return;}}Doublelist* temp=(Doublelist*)malloc(sizeof(Doublelist));if(NULL == temp){printf("创建失败!,插入失败!!!\n");return;}temp->msg.data = num;temp->next = NULL;temp->prev = NULL;temp->next = p->next;p->next = temp;temp->prev = p;if(temp->next != NULL){temp->next->prev = temp;}printf("在第%d个位置插入的值是%d\n",n,num);head->msg.len++;return;}/** function:    中间删除* @param [ in] * @param [out] * @return      */void middleshan(Doublelist* head,int n){if(head->next ==NULL || head == NULL){printf("删除失败,链表为空!!!%d\n");return;}if(n <= 0);{printf("删除位置非法!!!%d\n",n);return;}Doublelist* p = head;for(int i=0;i<n;i++){p=p->next;if(NULL == p){printf("%d删除位置非法!!!\n",n);return;}}p->prev->next = p->next;if(p->next != NULL){p->next->prev = p->next;}datatype num = p->msg.data;free(p);head->msg.len --;return;}

头文件:

#ifndef __02双向链表_H__                                          
#define __02双向链表_H__typedef int datatype;
typedef struct doublelist
{union{int len;datatype data;}msg;struct doublelist* next;struct doublelist* prev;
}Doublelist;Doublelist* lianbiao();//创建一个空的双向链表
void headcha(Doublelist* head,datatype num);//头插
void ledcha (Doublelist* head,datatype num);//尾插
void headshan(Doublelist* head);//头删
void ledshan(Doublelist* head);//尾删
void middlecha(Doublelist* head,datatype num,int n);//中间插入
void middleshan(Doublelist* head,int n);//中间删除#endif

主函数main:

 #include <stdio.h>                        #include "./02双向链表.h"int main(int argc, const char *argv[]){Doublelist* head = lianbiao();headcha(head,10);headcha(head,10);ledcha(head,90);headshan(head);ledshan(head);ledcha(head,80);ledcha(head,60);middlecha(head ,50,3);middleshan(head,2);return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26879.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LAMM: Label Alignment for Multi-Modal Prompt Learning

文章汇总 存在的问题 之前学者的方法主要侧重于适用于所有类别的提示模板&#xff0c;而忽略了每个类别的特征表示。 动机 引入可训练向量来替代多模态提示中的标签词。 流程解读 之前的方法侧重于适用于所有类别的提示模板&#xff0c;而忽略了每个类别的特征表示。作者这…

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展&#xff0c;我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力&#xff0c;正为我们每个人带来前所未有的红利。 那么&#xff0c;面对数字经济的红利&#xff0c;我们是否已经做好了准备&#xff1f;我们又该如何把握这个时代赋予我们的机…

上位机图像处理和嵌入式模块部署(h750 mcu vs f407)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在目前工业控制上面&#xff0c;f103和f407是用的最多的两种stm32 mcu。前者频率低一点&#xff0c;功能少一点&#xff0c;一般用在低端的嵌入式设…

PopChar for Mac——文本创作的得力助手

在文本创作过程中&#xff0c;特殊字符和符号的使用往往能够增加文本的表现力和吸引力。PopChar for Mac作为一款专为Mac用户设计的字符输入工具&#xff0c;为你提供了丰富的字符选择。它支持多种字符集和字体&#xff0c;让你能够根据自己的需求选择最适合的字符样式。同时&a…

基于LangChain-Chatchat实现的本地知识库的问答应用-快速上手(检索增强生成(RAG)大模型)

基于LangChain-Chatchat实现的本地知识库的问答应用-快速上手&#xff08;检索增强生成(RAG)大模型&#xff09; 基于 ChatGLM 等大语言模型与 Langchain 等应用框架实现&#xff0c;开源、可离线部署的检索增强生成(RAG)大模型知识库项目。 1.介绍 一种利用 langchain思想实…

无缝滚动的swiper

看效果 看代码 <swiper :indicator-dots"true" :autoplay"true" circular :interval"3000" :duration"6000" display-multiple-items"3" easing-function"linear"><swiper-item v-for"(item,indx…

经纬恒润助力微宏动力荣获ISO/SAE 21434网络安全流程认证证书

近日&#xff0c;经纬恒润与微宏动力合作的网络安全开发及认证项目顺利完成了阶段性里程碑。作为一家全球化的新能源及储电技术产品及解决方案供应商&#xff0c;微宏动力成功获得了由国际独立第三方检测、检验和认证机构UL Solutions授予的ISO/SAE 21434网络安全流程认证证书。…

[Algorithm][贪心][柠檬水找零][将数组和减半的最少操作次数][最大数][摆动序列]详细讲解

目录 1.柠檬水找零1.题目链接2.算法原理详解3.代码实现 2.将数组和减半的最少操作次数1.题目链接2.算法原理详解3.代码实现 3.最大数1.题目链接2.算法原理详解3.代码实现 4.摆动序列1.题目链接2.算法原理详解3.代码实现 1.柠檬水找零 1.题目链接 柠檬水找零 2.算法原理详解 …

FlashDB的TS数据库的标准ANSI C移植验证

本文目录 1、引言2、环境准备3、修改驱动4、验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在当今数据驱动的时代&#xff0c;高效可靠的数据存储与管理对于嵌入式系统及物联网(IoT)应用至关重…

非计算机专业可以考“软考”吗?

全国计算机软件水平考试对报名条件没有学历、资历、年龄以及专业等限制&#xff0c;非计算机专业的人员也可以报考。证书长期有效&#xff0c;考生可根据个人需求选择合适的级别和资格进行报考。报名方式包括网上报名和考生本人到指定地点报名两种。 考试范围 (1) 高级资格包括…

农业领域科技查新点提炼方法附案例!

农业学科是人类通过改造和利用生物有机体(植物、动物、微生物等)及各种自然资源(光、热、水、土壤等)生产出人类需求的农产品的过程&#xff0c;人类在这一过程中所积累的科学原理、技术、工艺和技能&#xff0c;统称为农业科学技术&#xff0c;该领域具有研究范围广、综合性强…

多模态革新:Ferret-v2在高分辨率图像理解与细粒度交互的突破

在多模态大模型&#xff08;MLLMs&#xff09;的研究中&#xff0c;如何将视觉理解能力与语言模型相结合&#xff0c;以实现更精细的区域描述和推理&#xff0c;是一个重要的研究方向。先前的工作如Ferret模型&#xff0c;通过整合区域理解能力&#xff0c;提升了模型在对话中的…

3-异常-出现 PSQLException: Connection refused的8种可能

3-异常-出现 PSQLException: Connection refused的8种可能 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09…

问题(05)elementui 输入框里面禁止浏览器自动填充用户名密码、弹出浏览器历史密码提示框

问题描述 el-input&#xff0c;非密码框&#xff0c;在输入时&#xff0c; 问题1&#xff1a; 浏览器自动填充用户名密码。问题2&#xff1a;右边显示浏览器历史密码提示框。 问题解决 问题1&#xff1a;使用auto-complete"new-password" <input type"te…

Rust基础学习-ModulesPackage

在Rust中&#xff0c;模块有助于将程序分割成逻辑单元&#xff0c;以提高可读性和组织性。一旦程序变得更大&#xff0c;将其拆分为多个文件或命名空间非常重要。 模块有助于构建我们的程序。模块是项目的集合&#xff1a;包括函数、结构体甚至其他模块。 Module 定义模块 在…

cleanmymacX和腾讯柠檬到底哪个好用 2024最新使用测评

CleanMyMac X和腾讯柠檬都是Mac系统清理软件&#xff0c;各有其特点和优势&#xff0c;选择哪个更好用取决于用户的具体需求和使用习惯。 经常有新关注的粉丝问&#xff0c;同样做为垃圾清理软件&#xff0c;付费CleanMyMac和免费的柠檬清理哪个更好用&#xff1f;其实&#xf…

大数据集成平台建设方案(Word方案)

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; 基于平台的基础架构&…

为什么选择 ABBYY FineReader PDF ?

帮助用户们对PDF文件进行快速的编辑处理&#xff0c;同时也可以快速识别PDF文件里的文字内容&#xff0c;并且可以让用户们进行文本编辑&#xff0c;所以可以有效提升办公效率。 ABBYY-ABBYY Finereader 15 Win-安装包&#xff1a;https://souurl.cn/OY2L3m 高级转换功能 ABBY…

【Python】Python 2 测试网络连通性脚本

文章目录 前言1. 命令行传参2. 代码 前言 最近在只有python2的服务器上部署服务&#xff0c;不能用三方类库&#xff0c;这里出于好奇心学习下python。这里简单做个脚本&#xff0c;实现了检验网络连通性的功能&#xff08;类似于curl&#xff09;。 1. 命令行传参 使用命令…

成功塑造领军人物形象,对企业带来哪些好处?

在企业的完整形象中&#xff0c;产品、品牌、高管是最重要的组成部分。小马识途建议中小企业在成长过程中及早对高管形象进行包装&#xff0c;成功塑造企业的领军人物&#xff0c;不单单是企业高管个人的形象提升&#xff0c;对企业经营发展带来诸多益处。小马识途营销顾问简单…