02.05

news2024/11/18 15:51:14

1.单链表

main

#include "1list_head.h"
int main(int argc, const char *argv[])
{
//创建链表之前链表为空
	Linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%d",&element);//11
		head=insert_rear(element,head);		
	}
	Output(head);
	//头删
	head=delete_head(head);
	Output(head);
	//尾删		
	head=delete_rear(head);
	Output(head);
	//按位置插入
	int pos;
	printf("please enter insert pos:");
	scanf("%d",&pos);
	printf("please enter insert element:");
	scanf("%d",&element);
	head=insert_pos(pos,element,head);
	Output(head);
	//按位置删除
	printf("please enter delete pos:");
	scanf("%d",&pos);
	head=delete_pos(pos,head);
	Output(head);	
	return 0;
}

list.c

#include "1list_head.h"
//创建链表节点
Linklist create_node()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	//s节点的数据域清0
	s->data=0;
	s->next=NULL;
	return s;
}
//尾插
Linklist insert_rear(datatype element,Linklist head)
{
	Linklist s=create_node();
	if(NULL==s)
		return head;
    s->data=element;

	if(NULL ==head)
	{
		head=s;
	}
	else 
	{
		Linklist p=head;
		while(p->next!=NULL)
		{
			p=p->next;
		}
		p->next=s;
	}
	return head;

}
//头插
Linklist insert_head(datatype element,Linklist head)
{
	Linklist s=create_node();
    if(NULL==s)
    return head;
	s->data=element;

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

    return head;
}
//尾删
Linklist delete_rear(Linklist head)
{
	if(NULL ==head)
		return head;
	if(NULL ==head->next)
	{
		free(head);head=NULL;
	}
	else 
	{
		Linklist del=head;
		while(del->next->next!=NULL)
		{
			del=del->next;
		}
		free(del->next);
		del->next=NULL;
	}
	return head;
}
//头删
Linklist delete_head(Linklist head)
{
	if(NULL==head)
	{
		return head;
	}else if(head->next==NULL){
	Linklist p=head;
		free(p);
		p=NULL;
	}
	else 
	{
		Linklist del=head;
		head=head->next;
		free(del);
		del=NULL;
	}

	return head;
}
//按位置插入
Linklist insert_pos(int pos,datatype element,Linklist head)
{
	if( pos<1 || pos>Length(head)+1)
		return head;
	if(NULL==head || pos==1)//判断是否只有一个节点
		head=insert_head(element,head);
	else 
	{
		Linklist p=head;
		for(int i=1;i<pos-1;i++)
		{
			p=p->next;
		}
		Linklist s=create_node();
		if(NULL==s)
			return head;
		s->data=element;
		
		s->next=p->next;
		p->next=s;
	}
	return head;
	
}
//按位置删除
Linklist delete_pos(int pos,Linklist head)
{
	if(NULL==head || pos<1 || pos>Length(head))
	{
		return head;
	}
	if(head->next==NULL ||pos==1)//只有一个节点
	{
		head=delete_head(head);
	}
	else //存在多个节点 >=2
	{
	Linklist p=head;
	for(int i=1;i<pos-1;i++)
	{
		p=p->next;
	}
	Linklist q=p->next;
	p->next=q->next;
	free(q);q=NULL;
	}
	return head;
}
//遍历
int Output(Linklist head)
{
	//1.判断链表为空
	if(NULL==head)
		return -1;
	//2,循环输出
	Linklist p=head;
	while(p!=NULL)
	{
		printf("%d\t",p->data);
		p=p->next;//后移
	}
	puts("");
	return 0;
}
//计算长度
int Length(Linklist head)
{
	int count=0;
	Linklist p=head;
	while(p!=NULL)
	{
		count++;
		p=p->next;
	}
	return count;
}

head

#ifndef __HEAD_H__
#define __HEAD_H__
#include "myhead.h"
typedef int datatype;
//创建节点结构体
typedef struct Node
{
	//数据域:存储数据元素
	datatype data;
	//指针域:存储下一个节点的地址
	struct Node *next;
}*Linklist;

//创建链表节点
Linklist create_node();

//尾插
Linklist insert_rear(datatype element,Linklist head);
//头插
Linklist insert_head(datatype element,Linklist head);
//尾删
Linklist delete_rear(Linklist head);
//头删
Linklist delete_head(Linklist head);
//按位置插入
Linklist insert_pos(int pos,datatype element,Linklist head);
//按位置删除
Linklist delete_pos(int pos,Linklist head);
//遍历
int Output(Linklist head);
//计算长度
int Length(Linklist head);

#endif

2.双向

main

#include "doublelink_head.h"
int main(int argc, const char *argv[])
{
	Doublelink head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("please enter %d element:",i+1);
		scanf("%s",element);
		head=doublelink_insert_rear(element,head);
	}
	
	Output(head);

	//头删
	head=delete_head(head);
    Output(head);
    //尾删
	head=delete_rear(head);
	Output(head);


	return 0;
}

list.c

#include "doublelink_head.h"
//创建节点
Doublelink create_node()
{
	Doublelink s=(Doublelink)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	strcpy(s->data,"");
	s->next=s->priv=NULL;
	return s;
}
//头插
Doublelink double_insert_head(datatype element,Doublelink head)
{
	Doublelink s=create_node();
	if(s==NULL)
		return head;
	strcpy(s->data,element);

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

}
//遍历
int Output(Doublelink head)
{
	if(NULL ==head)
		return -1;
    //正向
    puts("正向遍历\n");
	Doublelink p=head;
	while(p->next!=NULL)
	{
		printf("%s\t",p->data);
		p=p->next;
	}
	printf("%s\t",p->data);
    //逆向
	puts("\n逆向遍历");
	while(p!=NULL)
	{
		printf("%s\t",p->data);
		p=p->priv;	
	}
	puts("");
	return 0;
}

//尾插
Doublelink doublelink_insert_rear(datatype element,Doublelink head)
{
	Doublelink s=create_node();
	if(s==NULL)
		return head;
	strcpy(s->data,element);
	if(NULL ==head)
		head=s;
	else
	{
		Doublelink p=head;
		while(p->next!=NULL)
		{
			p=p->next;
		}

		p->next=s;
		s->priv=p;

	}
	return head;

}
//头删
Doublelink delete_head(Doublelink head)
{
	
	if(NULL==head)
		return head;
	Doublelink q=head;
	head=head->next;
	if(head!=NULL)
		head->priv=NULL;
	free(q);
	q=NULL;
	return head;
}
//尾删
Doublelink delete_rear(Doublelink head)
{
	if(NULL ==head)
		return head;
	if(head->next==NULL)
	{
		free(head);head=NULL;
	}
	else //>=2
	{
		Doublelink p=head;
		while(p->next!=NULL)
		{
			p=p->next;
		}
		p->priv->next=NULL;
		free(p);
		p=NULL;
	}
	return head;
}

head.h


#ifndef __DOUBLELINK_HEAD_H__
#define __DOUBLELINK_HEAD_H__
#include "myhead.h"

typedef char datatype[30];//datatype-->char [30]
//定义结构体
typedef struct Node
{
	//数据域:存储数据元素
	datatype data;
	//指针域:存储下一个节点的地址
	struct Node *next;
	//指针域:存储上一个节点的地址
	struct Node *priv;
}*Doublelink;


int Output(Doublelink head);
Doublelink double_insert_head(datatype element,Doublelink head);
Doublelink create_node();
Doublelink doublelink_insert_rear(datatype element,Doublelink head);
Doublelink delete_head(Doublelink head);
Doublelink delete_rear(Doublelink head);
#endif

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

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

相关文章

市场复盘总结 20240205

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率低 50% 最常用…

macOS Sonoma 14系统安装包

macOS Sonoma 14是苹果公司最新推出的操作系统&#xff0c;为Mac用户带来了全新的使用体验。Sonoma是苹果继Catalina之后的又一重要更新&#xff0c;它在改善系统性能、增加新功能、优化用户界面等方面做出了显著贡献。 macOS Sonoma 14系统有许多令人兴奋的新功能和改进&…

R语言:箱线图绘制(添加平均值趋势线)

箱线图绘制 1. 写在前面2.箱线图绘制2.1 相关R包导入2.2 数据导入及格式转换2.3 ggplot绘图 1. 写在前面 今天有时间把之前使用过的一些代码和大家分享&#xff0c;其中箱线图绘制我认为是非常有用的一个部分。之前我是比较喜欢使用origin进行绘图&#xff0c;但是绘制的图不太…

读千脑智能笔记05_千脑智能理论

1. 现有的新皮质理论 1.1. 最普遍的看法是新皮质就像一个流程图 1.2. 特征层次理论 1.2.1. 该理论最大的弊端在于认为视觉是个静止的过程&#xff0c;就像拍一张照片一样&#xff0c;但事实并非如此 1.2.1.1. 眼睛每秒会快速转…

考研数据结构笔记(1)

数据结构&#xff08;1&#xff09; 数据结构在学什么&#xff1f;数据结构的基本概念基本概念三要素逻辑结构集合线性结构树形结构图结构 物理结构&#xff08;存储结构&#xff09;顺序存储链式存储索引存储散列存储重点 数据的运算 算法的基本概念什么是算法算法的五个特性有…

MATLAB知识点:矩阵的除法

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.2 算术运算 下面我们再来介绍矩阵的除法。事…

蓝桥杯----凑算式

这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。 比如: 68/3952/714 就是一种解法, 53/1972/486 是另一种解法. 这个算式一共有多少种解法? 注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

图解Vue组件通讯【一图胜千言】

Vue的每个组件都有独自的作用域&#xff0c;组件间的数据是无法共享的&#xff0c;但实际开发工作中我们常常需要让组件之间共享数据&#xff0c;今天我们来学习下面三种组件通信方式&#xff1a; 父子组件之间的通信 兄弟组件之间的通信 祖先与后代组件之间的通信 1. 父子组件…

MIPS指令集处理器设计(支持64条汇编指令)

一、题目背景和意义 二、国内外研究现状 (略) 三、MIPS指令集处理器设计与实现 (一).MIPS指令集功能性梳理 1.MIPS指令集架构 (1).mips基础指令集格式总结 MIPS是&#xff08;Microcomputer without interlocked pipeline stages&#xff09;[10]的缩写&#xff0c;含义是…

开源免费的物联网网关 IoT Gateway

1. 概述 物联网网关&#xff0c;也被称为IOT网关&#xff0c;是一种至关重要的网络设备。在物联网系统中&#xff0c;它承担着连接和控制各种设备的重要任务&#xff0c;将这些设备有效地连接到云端、本地服务器或其他设备上。它既能够在广域范围内实现互联&#xff0c;也能在…

JAVASE进阶:Collection高级(2)——源码剖析ArrayList、LinkedList、迭代器

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;JAVASE进阶&#xff1a;Collection高级&#xff08;1&#xff09;——源码分析contains方法、lambda遍历集合 &#x1f4da;订阅…

IP地址信息在保险行业的创新应用与解决方案

随着数字化时代的来临&#xff0c;保险行业正积极探索新的技术手段&#xff0c;以提升服务效能、降低风险&#xff0c;并更好地满足客户需求。IP地址信息作为一种重要的数字化工具&#xff0c;在保险行业中展现了广泛的应用前景。IP数据云将深入探讨IP地址信息在保险行业中的创…

【极数系列】Flink集成KafkaSource 实时消费数据(10)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 连接器使用方法04 消息订阅4.1 主题订阅4.2 正则表达式订阅4.3 Partition 列分区订阅 05 消息解析06 起始消费位点07 有界 / 无界模式7.1 流式7.2 批式 08 其他属性8.1 KafkaSource 配置项&#xff08;1&…

Stable Diffusion 模型下载:RealCartoon3D - V14

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 RealCartoon3D 是一个动漫卡通混合现实风格的模型&#xff0c;具有真实卡通的 3D 效果&#xff0c;当前更新到 V14 版本。 RealCartoon3D 是我上传的第一个模型。…

一文掌握SpringBoot注解之@Configuration知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

C++后端开发之Sylar学习三:VSCode连接Ubuntu配置Gitee

C后端开发之Sylar学习三&#xff1a;VSCode连接Ubuntu配置Gitee 为了记录学习的过程&#xff0c;学习Sylar时写的代码统一提交到Gitee仓库中。 Ubuntu配置Gitee 安装git sudo apt-get install -y git配置用户名和邮箱 git config --global user.name 用户名 …

计算机项目SpringBoot项目 办公小程序开发

从零构建后端项目、利用UNI-APP创建移动端项目 实现注册与登陆、人脸考勤签到、实现系统通知模块 实现会议管理功能、完成在线视频会议功能、 发布Emos在线办公系统 项目分享&#xff1a; SpringBoot项目 办公小程序开发https://pan.baidu.com/s/1sYPLOAMtaopJCFHAWDa2xQ?…

第四讲 混合背包问题

【题意分析】 这道题转换一下即可&#xff0c;将题中出现的0/1背包问题和完全背包问题转换为多重背包问题即可&#xff1a; if(s -1) s 1; else if(!s) s V/v;【参考文献】 第三讲 多重背包问题②——二进制优化 完成这个转换之后&#xff0c;再使用二进制优化即可完成&a…

Java 学习和实践笔记(1)

2024年&#xff0c;决定好好学习计算机语言Java. B站上选了这个课程&#xff1a;【整整300集】浙大大佬160小时讲完的Java教程&#xff08;学习路线Java笔记&#xff09;零基础&#xff0c;就从今天开始学吧。 在这些语言中&#xff0c;C语言是最基础的语言&#xff0c;绝大多…

PYthon进阶--网页采集器(基于百度搜索的Python3爬虫程序)

简介&#xff1a;基于百度搜索引擎的PYthon3爬虫程序的网页采集器&#xff0c;小白和爬虫学习者都可以学会。运行爬虫程序&#xff0c;输入关键词&#xff0c;即可将所搜出来的网页内容保存在本地。 知识点&#xff1a;requests模块的get方法 一、此处需要安装第三方库reques…