寒假 day3

1.请编程实现双向链表的头插,头删、尾插、尾删

2.请编程实现双向链表按任意位置插入、删除、修改、查找

//头文件
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>	
#include<stdlib.h>
typedef char datatype;//定义双向链表结构体
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:下一个节点的地址struct Node *next;//指针域:上一个节点的地址struct Node *prev;
}*Doublelink;Doublelink inert_head(Doublelink head,datatype element);
Doublelink creat();
void output(Doublelink head);
Doublelink inert_rear(Doublelink head,datatype element);
Doublelink det_head(Doublelink head);
Doublelink det_rear(Doublelink head);
int length(Doublelink head);
Doublelink inert_pos(Doublelink head,int pos,datatype element);
Doublelink det_pos(Doublelink head,int pos);
void find_pos(Doublelink head,int pos);
void cpy_pos(Doublelink head,int pos,datatype element);
#endif
//主函数
#include"head.h"
int main(int argc, const char *argv[])
{Doublelink head=NULL;datatype element;int n;printf("please enter n:");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf(" %c",&element);//	head=inert_head(head,element);head=inert_rear(head,element);}output(head);
//头删
//	head=det_head(head);
//	output(head);
//尾删 
//	head=det_rear(head);
//	output(head);//任意位置插入int pos;printf("please enter inert pos:");scanf("%d",&pos);printf("please enter inert element:");scanf(" %c",&element);head=inert_pos(head,pos,element);output(head);//任意位置删除printf("please enter det pos:");scanf("%d",&pos);head=det_pos(head,pos);output(head);//查找printf("please enter find pos:");scanf("%d",&pos);find_pos(head,pos);//修改printf("please enter cpy pos:");scanf("%d",&pos);printf("please enter cpy element:");scanf(" %c",&element);cpy_pos(head,pos,element);output(head);return 0;
}
//文本段
#include"head.h"/** function:    创建新节点* @param [ in] * @param [out] * @return      成功返回s 失败返回NULL*/
Doublelink creat()
{Doublelink s=(Doublelink)malloc(sizeof(struct Node));if(s==NULL)return NULL;s->data=0;s->next=s->prev=NULL;return s;
}
/** function:    头插* @param [ in] * @param [out] head,element* @return      head*/
Doublelink inert_head(Doublelink head,datatype element)
{Doublelink s=creat();s->data=element;if(NULL==head)head=s;else{s->next=head;head->prev=s;head=s;}return head;
}
/** function:    遍历输出* @param [ in] * @param [out] head* @return      head*/
void output(Doublelink head)
{if(NULL==head){puts("empty");return;}else{Doublelink p=head;while(p->next!=NULL)//p到倒数第二个节点{printf("%-5c",p->data);p=p->next;}printf("%-5c\n",p->data);//最后一个元素输出/*	while(p)//逆向输出{printf("%-5c",p->data);p=p->prev;}*///	puts("");return;}
}
/** function:    尾插* @param [ in] * @param [out] head,element* @return      head*/
Doublelink inert_rear(Doublelink head,datatype element)
{Doublelink s=creat();s->data=element;if(NULL==head)head=s;else{Doublelink p=head;while(p->next!=NULL)//找到最后一个节点{p=p->next;}p->next=s;s->prev=p;}return head;
}
/** function:    头删* @param [ in] * @param [out] head* @return      head*/
Doublelink det_head(Doublelink head)
{if(NULL==head)return head;//多个节点>=1Doublelink p=head;head=p->next;head->prev=NULL;free(p);p=NULL;return head;}
/** function:    尾删* @param [ in] * @param [out] head* @return      head*/
Doublelink det_rear(Doublelink head)
{if(NULL==head)return head;else if(head->next==NULL)//一个节点{free(head);head=NULL;return head;}else//多个节点>=2{Doublelink p=head;while(p->next)p=p->next;p->prev->next=NULL;free(p);p=NULL;return head;}
}
/** function:    计算链表长度* @param [ in] * @param [out] head* @return      len*/
int length(Doublelink head)
{int len=0;while(head)//	printf("%-5c\n",p->data);//最后一个元素输出		puts("");{len++;head=head->next;}return len;
}/** function:    任意位置插入* @param [ in] * @param [out] head pos* @return      head*/
Doublelink inert_pos(Doublelink head,int pos,datatype element){int len=length(head);Doublelink s=creat();s->data=element;if(NULL==head||pos<1||pos>len+1){puts("error");return NULL; }if(pos==1){head=inert_head(head,element);return head;}Doublelink p=head;for(int i=0;i<pos-1;i++){p=p->next;}Doublelink k=p->prev;k->next=s;s->prev=k;s->next=p;p->prev=s;return head;
}
/** function:    任意位置删除* @param [ in] * @param [out] head pos* @return      head*/
Doublelink det_pos(Doublelink head,int pos)
{int len=length(head);//printf("%d\n",len);if(NULL==head||pos<1||pos>len){puts("error");return NULL;}if(pos==1){head=det_head(head);return head;}else if(pos==len){head=det_rear(head);return head;}Doublelink p=head;for(int i=0;i<pos-1;i++)p=p->next;Doublelink k=p->prev;k->next=p->next;p->next->prev=k;free(p);p=NULL;return head;
}
/** function:    逆置* @param [ in] * @param [out] head* @return      head*/
Doublelink rever(Doublelink head)
{if(NULL==head)return head;Doublelink p=head->next;head->next=NULL;p->prev=NULL;while(p){Doublelink t=p;p=p->next;t->next=head;head->prev=t;t->prev=NULL;head=t;}return head;
}
void find_pos(Doublelink head,int pos)
{int len=length(head);if(NULL==head||pos<1||pos>len)return ;Doublelink p=head;for(int i=0;i<pos-1;i++)p=p->next;printf("%c\n",p->data);}
void cpy_pos(Doublelink head,int pos,datatype element)
{int len=length(head);if(NULL==head||pos<1||pos>len)return;Doublelink p=head;for(int i=0;i<pos-1;i++)p=p->next;p->data=element;
}


3请简述栈和队列的区别?

4请简述什么内存泄露?

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

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

相关文章

3. 状态管理 vuex 状态管理库

目录 3.1 vuex 介绍 3.2 使用方式 3.1 vuex 介绍 vuex 是一个专为 Vue.js 应用程序开发的状态管理库 vuex 可以在多个组件之间共享数据&#xff0c;并且共享的数据是响应式的&#xff0c;即数据的变更能及时渲染到模板 vuex 采用集中式存储管理所有组件的状态 每一个 Vuex…

使用ESP32-S3对MQ-135空气质量传感器的使用记录(Arduino版)

一、硬件上&#xff1a; 1、使用esp32开发板的04引脚与AO连接&#xff0c;检测AO引脚的电平 二、软件上&#xff1a; 1、使用Arduino快速完成开发 2、源码&#xff1a; // Potentiometer is connected to GPIO 04 (Analog ADC1_CH3) const int adcPin 4;// variable for s…

2023启示录丨中国ESG这一年:在矛盾与摸索中前行

图片&#xff5c;Photo by Colby Winfield on Unsplash ©自象限原创 作者丨罗辑 编辑丨程心 2023年&#xff0c;许多行业开始争抢ESG人才&#xff0c;在猎聘APP上搜索“ESG”&#xff0c;相关岗位月薪可以达到10W~13W&#xff0c;甚至一些行业应届生的起薪都达到2~4万。…

少儿编程 中国电子学会图形化编程2022年1月等级考试Scratch三级真题解析(选择题、判断题)

1.默认小猫角色和气球角色都是显示状态&#xff0c;小猫程序如下图所示&#xff0c;气球没有程序&#xff0c;点击绿旗&#xff0c;舞台上最终显示的效果是&#xff1f;&#xff08; &#xff09; A&#xff1a;可能出现6个不同位置的小猫和6个小球 B&#xff1a;可能出现6个…

Opencv(C++)学习 TBB与OPENMP的加速效果实验与ARM上的实践(二)

在上一篇文章中&#xff0c;我们成功验证了Intel Threading Building Blocks (TBB) 与 OpenMP 在多线程并行处理方面的加速潜力。为了更深入地理解这些技术在实际应用场景中的效能提升&#xff0c;接下来我们将目光转向目标开发板环境&#xff0c;进一步探究这两种框架在嵌入式…

《幻兽帕鲁》好玩吗?幻兽帕鲁能在Mac上运行吗?

最近一款叫做《幻兽帕鲁》的新游戏走红&#xff0c;成为了Steam游戏平台上&#xff0c;连续3周的销量冠军&#xff0c;有不少Mac电脑用户&#xff0c;利用Crossover成功玩上了《幻兽帕鲁》&#xff0c;其实Crossover已经支持很多3A游戏&#xff0c;包括《赛博朋克2077》《博德之…

外卖单店小程序模板/小程序前端模板

外卖单店小程序模板简介&#xff1a;外卖单店小程序前端模板 外卖单店小程序模板截图

Java语法学习坐标体系/绘图

Java语法学习坐标体系/绘图 大纲 基本介绍绘图 具体案例 1. 基本介绍 2.绘图 基本介绍&#xff1a; 注意每次自动调用&#xff0c;就会重新执行一次paint方法里的所有程序 先自定义面板 创建一个类继承JPanel&#xff0c;然后重写构造器&#xff0c;paint方法 class M…

微信小程序(三十三)promise异步写法

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.promise异步与普通异步的写法区别 2.promise异步的优势 源码&#xff1a; index.wxml <view class"preview" bind:tap"onChoose"><image src"{{avatar}}" mode"…

2V2无人机红蓝对抗仿真

两架红方和蓝方无人机分别从不同位置起飞&#xff0c;蓝方无人机跟踪及击毁红方无人机 2020a可正常运行 2V2无人机红蓝对抗仿真资源-CSDN文库

在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程

在idea插件市场搜索rust&#xff1a;JetBrains Marketplace &#xff0c;就可以找到rust插件&#xff1a; jetbrains官方rust插件地址&#xff1a;[Deprecated] Rust - IntelliJ IDEs Plugin | Marketplace 直接在idea中搜索rust好像是搜不到的&#xff1a; 需要在这个插件市场…

RabbitMQ_00000

MQ的相关概念 RabbitMQ官网地址&#xff1a;https://www.rabbitmq.com RabbitMQ API地址&#xff1a;https://rabbitmq.github.io/rabbitmq-java-client/api/current/ 什么是MQ&#xff1f; MQ(message queue)本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中…