2月4日作业

news2024/11/19 7:41:16

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

头插:

尾插:

头删:

尾删:

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

插入: 

删除:

 查找:

修改:

头文件: 


#ifndef __HEAD_H_
#define __HEAD_H_

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int datatype;
enum {FALSE=-1,SUCCESS};
typedef struct node
{
	datatype data;
	struct node *next;
	struct node *prev;
}*doublelink;


doublelink creat();
doublelink insert_head(doublelink head,datatype element);
doublelink insert_rear(doublelink head,datatype element);
void output(doublelink head);
doublelink delete_head(doublelink head);
doublelink delete_rear(doublelink head);
doublelink insert_pos(doublelink head,int pos,datatype element);
doublelink delete_pos(doublelink head,int pos);

datatype search_pos(doublelink head,int pos);
void update_pos(doublelink head,int pos,datatype element);

#endif

主函数:

#include"head.h"

int main(int argc, const char *argv[])
{

	doublelink head=NULL;
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	datatype element;
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element); 
		//头插
//		head=insert_head(head,element);
		//尾插
		head=insert_rear(head,element);
		
	}

	//遍历输出
	output(head);
	//头删
//	head=delete_head(head);
//	output(head);
	
	//尾删
//	head=delete_rear(head);
//	output(head);

	//任意位置插入
	int pos;
	printf("please enter pos:");
	scanf("%d",&pos);
	printf("please enter element:");
	scanf("%d",&element);
//	head=insert_pos(head,pos,element);
//	output(head);

	//任意位置删除
//	head=delete_pos(head,pos);
//	output(head);

	//任意位置查找
//	datatype s=search_pos(head,pos);
//	if(s==-1)
//		puts("no");
//	else
//		printf("s=%d\n",s);

	//任意位置修改
	update_pos(head,pos,element);
	output(head);




	return 0;
}

自定义函数:


#include"head.h"
//创建节点
doublelink creat()
{
	doublelink head=(doublelink)malloc(sizeof(struct node));
	if(head==NULL)
		return NULL;
	head->data=0;
	head->next=head->prev=NULL;
	return head;
}

//头插
doublelink insert_head(doublelink head,datatype element)
{
	doublelink s=creat();
	s->data=element;

	if(head==NULL)
	{
		head=s;
	}
	else
	{
		s->next=head;
		head->prev=s;
		head=s;
	}	
	return head;
}

//尾插
doublelink insert_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;
}

//输出
void output(doublelink head)
{
	if(head==NULL)
	{
		printf("empty\n");
		return;
	}
	doublelink p=head;
	while(p->next)
	{
		printf("%-4d",p->data);
		p=p->next;
	}
	printf("%-4d\n",p->data);
}

//头删
doublelink delete_head(doublelink head)
{
	if(head==NULL)
		return head;
/*	if(head->next==NULL)
	{
		free(head);
		head=NULL;
		return head;
	}
*/
	doublelink del=head;
	head=head->next;
	head->prev=NULL;
	free(del);
	del=NULL;
	return head;
}

//尾删
doublelink delete_rear(doublelink head)
{
	if(head==NULL)
		return head;
	if(head->next==NULL)
	{
		free(head);
		head=NULL;
		return head;
	}
	doublelink p=head;
	while(p->next)
	{
		p=p->next;
	}
	p->prev->next=NULL;
	free(p);
	p=NULL;
	return head;
}

//计算长度

int length(doublelink head)
{
	int len=0;
	doublelink p=head;
	while(p)
	{
		len++;
		p=p->next;
	}
	return len;
}

/*
 * function:    任意位置插入
 * @param [ in] 
 * @param [out] 头,位置,插入元素
 * @return      头
 */
doublelink insert_pos(doublelink head,int pos,datatype element)
{
	if(pos==1)
	{
		head=insert_head(head,element);
		return head;
	}
	else if(pos>1 || pos<=length(head))
	{
		doublelink s=creat();
		s->data=element;
		doublelink p=head;
		for(int i=1;i<pos-1;i++)
		{
			p=p->next;
		}
		s->next=p->next;
		s->prev=p;
		p->next->prev=s;
		p->next=s;
		return head;
	}
	else if(pos==length(head)+1)
	{
		head=insert_rear(head,element);
		return head;
	}
	else
	{
		puts("error");
		return head;
	}

}

//任意位置删除

doublelink delete_pos(doublelink head,int pos)
{
	if(head==NULL || pos<1 || pos>length(head))
	{
		puts("error");
		return head;
	}
	if(pos==1)
	{
		head=delete_head(head);
	}
	else if(pos>1 && pos<length(head))
	{
		doublelink p=head;
		doublelink del=head;
		for(int i=1;i<pos-1;i++)
		{
			p=p->next;
		}
		del=p->next;
		p->next=del->next;
		del->next->prev=p;
		free(del);
		del=NULL;
		return head;
	}
	else if(pos==length(head))
	{
		head=delete_rear(head);
		return head;
	}
}

//任意位置查找
datatype search_pos(doublelink head,int pos)
{
	if(head==NULL || pos<1 || pos>length(head))
	{
		return FALSE;
	}
	doublelink p=head;
	int i=1;
	for(i;i<pos;i++)
	{
		p=p->next;
	}
	return p->data;
}

//任意位置修改
void update_pos(doublelink head,int pos,datatype element)
{
	if(head==NULL || pos<1 || pos>length(head))
	{
		puts("error");
		return;
	}
	doublelink p=head;
	int i=1;
	for(i;i<pos;i++)
	{
		p=p->next;
	}
	p->data=element;
}


3、栈和队列的区别

栈:先进后出;在栈顶端实现插入删除;

队列:先进先出;在队尾插入,队首删除;

4、什么是内存泄漏

在释放内存时,头指针没有指向堆区的首地址,会造成内存泄漏

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

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

相关文章

Golang 学习(二)进阶使用

二、进阶使用 性能提升——协程 GoRoutine go f();一个 Go 线程上&#xff0c;可以起多个协程&#xff08;有独立的栈空间、共享程序堆空间、调度由用户控制&#xff09;主线程是一个物理线程&#xff0c;直接作用在 cpu 上的。是重量级的&#xff0c;非常耗费 cpu 资源。协…

msvcp120.dll丢失如何解决/找不到msvcp120.dll的5种有效的解决方法

在计算机系统运行过程中&#xff0c;如果遇到“找不到msvcp120.dll”的提示信息&#xff0c;这代表了何种具体状况呢&#xff1f;首先&#xff0c;我们需要明确msvcp120.dll文件的重要性。msvcp120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;这是一…

Java入门之JavaSe(韩顺平p1-p?)

学习背景&#xff1a; 本科搞过一段ACM、研究生搞了一篇B会后&#xff0c;本人在研二要学Java找工作啦~~&#xff08;宇宙尽头是Java&#xff1f;&#xff09;爪洼纯小白入门&#xff0c;C只会STL、python只会基础Pytorch、golang参与了一个Web后端项目&#xff0c;可以说项目小…

数据库学习笔记2024/2/5

2. SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前&#xff0c;先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…

查大数据检测到风险等级太高是怎么回事?

随着金融风控越来越多元化&#xff0c;大数据作为新兴的技术被运用到贷前风控中去了&#xff0c;不少人也了解过自己的大数据&#xff0c;但是由于相关知识不足&#xff0c;看不懂报告&#xff0c;在常见的问题中&#xff0c;大数据检测到风险等级太高是怎么回事呢?小易大数据…

支持534种语言,开源大语言模型MaLA-500

无论是开源的LLaMA 2还是闭源的GPT系列模型&#xff0c;功能虽然很强大&#xff0c;但对语言的支持和扩展比较差&#xff0c;例如&#xff0c;二者都是以英语为主的大模型。 为了提升大模型语言的多元化&#xff0c;慕尼黑大学、赫尔辛基大学等研究人员联合开源了&#xff0c;…

第十四篇【传奇开心果系列】Python的OpenCV库技术点案例示例:图像特征提取与描述

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文目录前言一、OpenCV图像特征提取与描述介绍二、OpenCV图像特征提取与描述初步示例代码三、扩展思路介绍四、特征点筛选和匹配优化示例代码五、多尺度特征提取示例代码六、非局部特征描述子示例代码…

【数据结构与算法】之排序系列-20240205

这里写目录标题 一、1346. 检查整数及其两倍数是否存在二、1365. 有多少小于当前数字的数字三、1460. 通过翻转子数组使两个数组相等四、1491. 去掉最低工资和最高工资后的工资平均值五、1502. 判断能否形成等差数列 一、1346. 检查整数及其两倍数是否存在 简单 给你一个整数数…

工业笔记本丨行业三防笔记本丨亿道加固笔记本定制丨极端温度优势

工业笔记本是专为在恶劣环境条件下工作而设计的高度耐用的计算机设备。与传统消费者级笔记本电脑相比&#xff0c;工业笔记本在极端温度下展现出了许多优势。本文将探讨工业笔记本在极端温度环境中的表现&#xff0c;并介绍其优势。 耐高温性能: 工业笔记本具有更高的耐高温性…

CodeMeter强化了ETM WinCC 开放架构平台的许可与安全保护

在面对日益复杂的网络安全威胁时&#xff0c;ETM professional control采取了前瞻性的措施&#xff0c;选择了业界领先的威步CodeMeter技术&#xff0c;以保护其标志性的WinCC开放架构平台。这一选择不仅体现了ETM对安全的高度重视&#xff0c;也标志着其在保障关键基础设施运营…

见龙在田,预防性保护措施让文物传承千年

一、“见龙在田——山西出土龙文物展” “见龙在田——山西出土龙文物展”以十二生肖龙为线索&#xff0c;在山西省考古研究院&#xff08;山西考古博物馆&#xff09;揭幕&#xff0c;深入展示了中国优秀传统文化的悠久历史。展览汇聚了130多件珍贵历史文物。从新石器时代到汉…

2.0 Zookeeper 安装配置

Linux 安装 zookeeper 下载地址为: Apache ZooKeeper。 选择一稳定版本&#xff0c;本教程使用的 release 版本为3.4.14&#xff0c;下载并安装。 打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz&#xff0c;看到如下界…

Linux中有名管道和无名管道

无名管道基础 进程间通信介绍 常用通信方式 无名管道&#xff08;pipe&#xff09; 有名管道 &#xff08;fifo&#xff09; 信号&#xff08;signal&#xff09; 共享内存(mmap) 套接字&#xff08;socket&#xff09;过时的IPC通信方式 System V IPC 共享内存&#xff08;sh…

机器学习---概率图模型(隐马尔可夫模型、马尔可夫随机场、条件随机场)

1. 隐马尔可夫模型 机器学习最重要的任务是根据已观察到的证据&#xff08;例如训练样本&#xff09;对感兴趣的未知变量&#xff08;例如类别标 记&#xff09;进行估计和推测。概率模型&#xff08;probabilistic model&#xff09;提供了一种描述框架&#xff0c;将描述任…

【Qt Design】界面介绍

文章目录 前言Widget Box&#xff08;工具箱&#xff09;对象查看器Qt Design属性编译器sizePolicy内容 信号/槽编辑器资源浏览器ui文件 前言 Widget Box&#xff08;工具箱&#xff09; 提供很多控件 对象查看器 对象查看区域&#xff0c;可以查看主窗口放置对象的列表 …

HTTP相关问题

目录 1.从输入URL到页面展示到底发生了什么&#xff1f; 2.HTTP状态码有哪些&#xff1f; 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些&#xff1f; 4.HTTP和HTTPS有什么区别&…

CSS:水平垂直居中

水平垂直居中效果如下&#xff1a; HTML: <div class"parent"><div class"child"></div> </div>公共的 CSS&#xff1a; .parent {width: 300px;height: 300px;background-color:#d0e4fe; }.child {width: 100px;height: 100px…

第二篇:MySQL安装与配置(基于小皮面板(phpstudy))

在第一篇中介绍了数据库的相关概念&#xff0c;了解到SQL是用来操作数据库管理系统的语言&#xff0c;因此要学习数据库技术&#xff0c;数据库管理系统的配备是必不可少的&#xff01; 并且出于流行性与实惠性的双考量而选择MySQL这款数据库管理系统软件 一&#xff0c;工具推…

centos安装inpanel

前置条件 安装python yum -y install python 安装 cd /usr/local git clone https://gitee.com/WangZhe168_admin/inpanel.git cd inpanel python install.py 安装过程需要设置账户 密码 端口号 我设置的是admin:admin 10050 使用 打开浏览器,输入 http://192.168.168.…

mysql 多数据源

依赖 <dependencies><!--mysql连接--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--多数据源--><dependency><g…