寒假作业-day3

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

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

代码:

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

typedef int datatype;
typedef struct Node{
	datatype data;
	struct Node *next;
	struct Node *prev;
}*linklist;

linklist create();
void output(linklist head);
linklist insert_head(linklist head,datatype e);
linklist delete_head(linklist head);
linklist insert_rear(linklist head,datatype e);
linklist delete_rear(linklist head);

linklist insert_pos(linklist head,int pos,datatype e);
linklist delete_pos(linklist head,int pos);
void search_pos(linklist head,int pos);
linklist change_pos(linklist head,int pos,datatype e);

int main(int argc,const char *argv[]){
	linklist head=NULL;
	int arr[]={11,22,33,44,55};
	int len=sizeof(arr)/sizeof(arr[0]);
	for(int i=0;i<len;i++)
		head=insert_head(head,arr[i]);
	output(head);
	head=delete_head(head);
	output(head);
        int len1=sizeof(arr)/sizeof(arr[0]);
        for(int i=0;i<len1;i++)
                head=insert_rear(head,arr[i]);
        output(head);
        head=delete_rear(head);
        output(head);
	int choice,pos,e;
	printf("请输入操作元素:");      
	scanf("%d",&e);
 	printf("请输入操作位置:");
        scanf("%d",&pos);
        head=insert_pos(head,pos,e);
        output(head);
        head=delete_pos(head,pos);
        output(head);
        search_pos(head,pos);
	head=change_pos(head,pos,e);
	output(head);
	return 0;
}
linklist create(){
	linklist p=(linklist)malloc(sizeof(struct Node));
	if(!p)
		return NULL;
	p->data=0;
	p->next=NULL;
	p->prev=NULL;
	return p;
}
void output(linklist head){
	linklist p=head;
	if(!head)
		return;
//	while(p->next)
//		p=p->next;
	while(p){
		printf("%d\t",p->data);
//		p=p->prev;
		p=p->next;
	}
	puts("");
}
linklist insert_head(linklist head,datatype e){
	linklist p=create();
	p->data=e;
	if(!head){
		head=p;
		return head;
	}
	p->next=head;
	head->prev=p;
	head=p;
	head->prev=NULL;
	return head;
}

linklist delete_head(linklist head){
	if(!head)
		return head;
	if(!head->next){
		free(head);
		head=NULL;
		return head;
	}
	linklist p=head;
	head=head->next;
	free(p);
	p=NULL;
	head->prev=NULL;
	return head;
}
linklist insert_rear(linklist head,datatype e){
	linklist p=create();
	p->data=e;
	if(!head)
		return head;
	linklist q=head;
	while(q->next)
		q=q->next;
	q->next=p;
	p->prev=q;
	return head;
}
linklist delete_rear(linklist head){
	if(!head)
		return head;
	if(!head->next){
		free(head);
		head=NULL;
		return head;
	}
	linklist p=head;
	while(p->next->next)
		p=p->next;
	linklist q=p->next;
	p->next=NULL;
	free(q);
	q=NULL;
	return head;
}
int length(linklist head){
	int len;
	linklist p=head;
	while(p){
		len++;
		p=p->next;
	}
	return len;
}
linklist insert_pos(linklist head,int pos,datatype e){
	if(pos<0||pos>length(head)){
		puts("error");
		return head;
	}
	linklist p=create();
	p->data=e;
	linklist q=head;
	if(pos==0)
		return insert_head(head,e);
	else if(pos==length(head))
		return insert_rear(head,e);
	else{
		for(int i=0;i<pos-1;i++)
			q=q->next;
		p->next=q->next;
		q->next->prev=p;
		q->next=p;
		p->prev=q;
		
		
		return head;
	}
}
linklist delete_pos(linklist head,int pos){
	if(pos<0||pos>=length(head)){
		puts("error");
		return head;
	}
	if(!head||!head->next||pos==0)
		return delete_head(head);
	else if(pos==length(head)-1)
		return delete_rear(head);
	else{
		linklist p=head;
		for(int i=0;i<pos-1;i++)
			p=p->next;
		linklist q=p->next;
		p->next=q->next;
		q->next->prev=p;
		free(q);
		q=NULL;
		return head;
		}
}

void search_pos(linklist head,int pos){
	if(pos<0||pos>=length(head))
		return;
	linklist p=head;
	for(int i=0;i<pos;i++)
		p=p->next;
	printf("查找元素为:%d\n",p->data);
}
linklist change_pos(linklist head,int pos,datatype e){
        if(pos<0||pos>=length(head))
                return head;
        linklist p=head;
        for(int i=0;i<pos;i++)
                p=p->next;
	p->data=e;
	return head;
}

结果展示:

1)正序输出

2)逆序输出

2>请简述栈和队列的区别

1)栈是先进后出,队列是先进先出

2)栈在一端(栈顶)实现插入和删除,队列:在两端(队头,队尾)实现插入和删除)

3>请简述什么内存泄露?

        内存泄漏是指程序运行过程中申请了内存空间,但没有释放,导致这部分内存无法再被其他程序使用。

        内存泄漏可能会导致程序运行时占用的内存越来越多,最终导致系统性能下降或者程序崩溃。

内存泄露有以下几种情况:

(1)忘记释放动态分配的内存:

        当我们使用malloc分配内存时,需要在使用完毕后使用free来释放内存。如果忘记释放,就会造成内存泄漏。

(2)丢失指向动态分配内存的指针:

        当一个指针指向动态分配的内存,但该指针被重新赋值或者丢失,导致无法释放这块内存,也会造成内存泄漏。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP入门指南:起步篇

PHP入门指南&#xff1a;起步篇 PHP入门指南&#xff1a;起步篇什么是PHP&#xff1f;PHP 的优点PHP 开发环境搭建选择本地服务器软件包安装PHP环境配置Web服务器和PHP测试PHP安装 第一个PHP脚本PHP基础语法标记注释变量数据类型常量条件语句循环函数 PHP入门指南&#xff1a;起…

python算法与数据结构---动态规划

动态规划 记不住过去的人&#xff0c;注定要重蹈覆辙。 定义 对于一个模型为n的问题&#xff0c;将其分解为k个规模较小的子问题&#xff08;阶段&#xff09;&#xff0c;按顺序求解子问题&#xff0c;前一子问题的解&#xff0c;为后一子问题提供有用的信息。在求解任一子…

【MySQL】- 09 Select Count

【MySQL】- 09 Select Count 1认识COUNT2 COUNT(列名)、COUNT(常量)和COUNT(*)之间的区别3 COUNT(*)的优化 4 COUNT(*)和COUNT(1)5 COUNT(字段)总结 数据库查询相信很多人都不陌生&#xff0c;所有经常有人调侃程序员就是CRUD专员&#xff0c;这所谓的CRUD指的就是数据库的增删…

产业热点 | 从 Vision Pro 发售,洞见空间计算时代新机遇

*图源&#xff1a;Apple 官网 近日首批 Vision Pro 启动预约发售&#xff0c;短短一周就预估售出 20 万台&#xff0c;如今正式发售在即&#xff0c;再度受到各界的热切关注。 *图源&#xff1a;Apple 官网 同样作为空间计算赛道企业&#xff0c;ALVA Systems 在过去十余年始…

IP数据云识别真实IP与虚假流量案例

随着互联网的普及&#xff0c;企业在数字领域面临着越来越复杂的网络威胁。为了保护网站免受虚假流量和恶意攻击的影响&#xff0c;许多企业正在采用IP数据云。本文将结合一个真实案例&#xff0c;深入探讨IP数据云如何成功准确地识别真实用户IP和虚假流量IP&#xff0c;提高网…

ESU毅速丨3D打印技术引领模具制造创新革命

随着科技的飞速发展&#xff0c;3D打印技术已经成为制造业的新宠。而在模具制造领域&#xff0c;3D打印技术更是带来了巨大的创新价值&#xff0c;引领着模具制造的革命性变革。 传统模具制造过程中&#xff0c;需要经过多道繁琐工序&#xff0c;而3D打印技术简化了这一过程。3…

python接口自动化(五)--接口测试用例和接口测试报告模板(详解)

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上手…

基于场景文字知识挖掘的细粒度图像识别算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;基于场景文字知识挖掘的细粒度图像识别算法1、研究背景2、方法提出方法模块 3、试验4、文章贡献 二、RNN代码学习2.1、什么是RNN2…

day43_jdbc

今日内容 0 复习昨日 1 SQL注入问题 2 PreparedStatement 3 完成CRUD练习 4 ORM 5 DBUtil (properties) 6 事务操作 0 复习昨日 已经找人提问… 1 SQL注入 1.1 什么是SQL注入 用户输入的数据中有SQL关键词,导致在执行SQL语句时出现一些不正常的情况.这就是SQL注入! 出现SQL注入…

两种方式实现文本超出指定行数显示展开收起...

需要实现这样一个功能 默认高度下文本超出隐藏&#xff0c;点击展开可查看所有内容&#xff0c;点击收起可折叠 方法一&#xff1a;通过html和css实现 代码部分 html:<div className"expand-fold"><input id"check-box" type"checkbox&qu…

幻兽帕鲁游戏中走路卡顿并且会出现回弹是什么原因?

可能原因是最近的 1.4.0 更新后&#xff0c;代码中有一个启动参数的加入&#xff0c;导致 CPU 占用极高。 可以远程连接你的服务器 然后执行下面的代码&#xff0c;删除代码中的那个启动参数。 # 删除可能导致人物回弹的游戏服务器启动参数 sudo -u ecs-assist-user sed -i s…

ios搭建OpenGL环境

前言 本篇文章介绍在ios搭建OpenGL开发环境 在app的启动文章中&#xff0c;讲述了一个ios应用是如何启动的以及在IOS 13之后苹果公司推出的多窗口功能&#xff0c;通过app的启动这篇文章&#xff0c;我们基本能随心所欲的搭建一个app应用环境&#xff0c;搭建完成后的基本文件…

雨课堂怎么搜答案?七个受欢迎的搜题分享了 #微信#职场发展雨课堂怎么搜答案?七个受欢迎的搜题分享了 #微信#职场发展

积极参加社团活动和实践项目&#xff0c;可以帮助大学生拓宽人脉圈和锻炼实际操作能力。 1.福昕翻译 可以一键翻译文档内容&#xff0c;并提供还原排版的译文&#xff0c;对经常看外文文献的朋友来说&#xff0c;绝对是福音 福昕翻译是一流专业的在线翻译服务平台,支持PDF文…

一文带你了解编码集

编码集 1. ASCII编码&#xff1a; 127个字母 8个数据位足够存储字母、数字、符号&#xff0c;支持到0x7F。 2. GB2312编码 每个汉字占据2个字节(高位和低位)&#xff0c;16个数据。GB2312是对ASCII的中文扩展&#xff0c;共包含7000多个汉字。是计算机发展到中国后发展起来…

Python算法100例-1.3 牛顿迭代法求方程根

完整源代码项目地址&#xff0c;关注博主私信’源代码’后可获取 1&#xff0e;问题描述 编写用牛顿迭代法求方程根的函数。方程为 a x 3 b x 2 c x d 0 ax^3bx^2cxd0 ax3bx2cxd0&#xff0c;系数a、b、c、d由主函数输入&#xff0c;求x在1附近的一个实根。求出根后&…

VBA字典与数组第十一讲:普通公式与数组公式的本质区别

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

MAE实战:使用MAE提高主干网络的精度(一)

摘要 MAE已经出来有几年了&#xff0c;很多人还不知道怎么去使用&#xff0c;本文通过两个例子说明一下。分两部分&#xff0c;一部分介绍一个简单的例子&#xff0c;让大家了解MAE训练的流程。一部分是一个新的模型&#xff0c;让大家了解如何将自己的模型加入MAE。 论文标…

Java 获取操作时区 ZonedDateTime

Java 获取操作时区 ZonedDateTime package com.zhong.timeaddress;import java.time.Clock; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Set;public class TimeAddress {public static void main(String[] args) {// 获取系统默认时区ZoneId…

PyTorch 中神经网络库torch.nn的详细介绍

1. torch.nn torch.nn 是 PyTorch 深度学习框架中的一个核心模块&#xff0c;它为构建和训练神经网络提供了丰富的类库。 以下是 torch.nn 的关键组成部分及其功能&#xff1a; nn.Module 类&#xff1a; nn.Module 是所有自定义神经网络模型的基类。用户通常会从这个类派生…