02.05

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

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

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

相关文章

22.仿简道云公式函数实战-数学函数-COT

1. COT函数 COT 函数可用于计算角度的余切值。 2. 函数用法 COT(弧度) 使用该函数时&#xff0c;需要将角度转化为弧度参与计算&#xff0c;可通过 RADIANS 函数 将角度转化为弧度。 3. 函数示例 如计算 COT(45) 的值&#xff0c;可设置公式为COT(RADIANS(45))&#xff0…

算法——二分查找算法

1. 二分算法是什么&#xff1f; 简单来说&#xff0c;"二分"指的是将查找的区间一分为二&#xff0c;通过比较目标值与中间元素的大小关系&#xff0c;确定目标值可能在哪一半区间内&#xff0c;从而缩小查找范围。这个过程不断重复&#xff0c;每次都将当前区间二分…

算法练习-四数之和(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨在…

配置git环境与项目创建

项目设计 名称&#xff1a;KOB 项目包含的模块 PK模块&#xff1a;匹配界面&#xff08;微服务&#xff09;、实况直播界面&#xff08;WebSocket协议&#xff09; 对局列表模块&#xff1a;对局列表界面、对局录像界面 排行榜模块&#xff1a;Bot排行榜界面 用户中心模块&…

【Qt】常见问题

1.存在未解析的标识符 将build文件夹删掉重新编译。 2.左侧项目目录栏无法删除已添加项目 打开目标项目上一级的pro文件&#xff0c;将目标文件名字注释或者删除掉&#xff0c;最后保存&#xff0c;qt就会自动更新&#xff0c;将该项目隐藏掉。 3.在qt creator下添加槽函数…

大型装备制造企业案例分享——通过CRM系统管理全球业务

本期&#xff0c;小Z为大家带来的CRM管理系统客户案例是某大型装备制造企业运用Zoho CRM管理全球业务的过程分享。该企业是创业板上市公司&#xff0c;业务遍及100多个国家和地区&#xff0c;合作伙伴超百位&#xff0c;拥有覆盖全球的销售和服务网络。截止目前&#xff0c;相继…

油猴js 获取替换网页链接并重定向

场景 适用一些镜像网站进行重定向&#xff0c;比如Github。 代码 // UserScript // name New Userscript // namespace http://tampermonkey.net/ // version 2024-02-06 // description try to take over the world! // author You // match …

❤ React18 环境搭建项目与运行(地址已经放Gitee开源)

❤ React项目搭建与运行 环境介绍 node v20.11.0 react 18.2 react-dom 18.2.0一、React环境搭建 第一种普通cra搭建 1、检查本地环境 node版本 18.17.0 检查node和npm环境 node -v npm -v 2、安装yarn npm install -g yarn yarn --version 3、创建一个新的React项目…

OpenCV 图像处理六(傅里叶变换、模板匹配与霍夫变换)

文章目录 一、傅里叶变换1.1 NumPy实现和逆实现1.1.1 NumPy实现傅里叶变换Demo 1.1.2 NumPy实现逆傅里叶变换Demo 1.2 OpenCV实现和逆实现1.2.1 OpenCV实现傅里叶变换Demo 1.2.2 OpenCV实现逆傅里叶变换Demo 1.3 频域滤波1.3.1低频、高频1.3.2 高通滤波器构造高通滤波器Demo 1.…

jquery写表格,通过后端传值,并合并单元格

<!DOCTYPE html> <html> <head><title>Table Using jQuery</title><style>#tableWrapper {width: 100%;height: 200px; /* 设置表格容器的高度 */overflow: auto; /* 添加滚动条 */margin-top: -10px; /* 负的外边距值&#xff0c;根据实际…

Mac OS中创建适合网络备份的加密镜像文件:详细步骤与参数选择

这篇文章提供了在Mac OS中创建适合网络备份的加密镜像文件的详细步骤&#xff0c;同时探讨了在选择相关参数时的关键考虑因素&#xff0c;以确保用户能够安全、高效地存储和保护重要数据。 创建步骤 在Mac OS Monterey中&#xff0c;你可以使用“磁盘工具”&#xff08;Disk …

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏12(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言斧头动画控制配置拿出 待机和攻击动画代码控制攻击动画 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中&#xff0…

LRU缓存

有人从网络读数据&#xff0c;有人从磁盘读数据&#xff0c;机智的人懂得合理利用缓存加速数据的读取效率&#xff0c;提升程序的性能&#xff0c;搏得上司的赏识&#xff0c;赢得白富美的青睐&#xff0c;进一步走向人生巅峰~ LRU假说 LRU缓存&#xff08;Least Recently Used…

SQL--函数

概念 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着&#xff0c;这一段程序或代码在MySQL中 已经给我们提供了&#xff0c;我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那 么&#xff0c;函数到底在哪儿使用呢&#xff1f; 我…

【Python 实战】---- 实现向指定PDF指定页面指定位置插入图片

1. 需求 想要能否实现批量自动为多个pdf加盖不同六格虚拟章(不改变pdf原有分辨率和文字可识别性);改在pdf首页上方空白位置,一般居中即可;如可由使用者自主选择靠页边距更好,以便部分首页上方有字的文件时人工可微调位置。2. 需求分析 直接将 pdf 文件转换为图片,在将图…

飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态资源对象分类

文章目录 k8s架构图有状态和无状态服务 资源和对象对象规约和状态 资源的对象-资源的分类元数据型与集群型资源命名空间 k8s架构图 有状态和无状态服务 区分有状态和无状态服务有利于维护yaml文件 因为配置不同资源和对象 命令行yaml来定义对象对象规约和状态 规约 spec 描述…

Unity_修改天空球

Unity_修改天空球 Unity循序渐进的深入会发现可以改变的其实很多&#xff0c;剖开代码逻辑&#xff0c;可视化的表现对于吸引客户的眼球是很重要的。尤其对于知之甚少的客户&#xff0c;代码一般很难说服客户&#xff0c;然表现确很容易。 非代码色彩通才&#xff0c;持续学习…

洞悉未来,解锁因果:2023年DataFunSummit因果推断在线峰会全景解读

随着大数据和人工智能的飞速发展&#xff0c;因果推断作为连接数据与决策的桥梁&#xff0c;正日益受到各行业的广泛关注。 在这样的背景下&#xff0c;2023年DataFunSummit因果推断在线峰会如期而至&#xff0c;汇聚了众多业界领袖和专家学者&#xff0c;共同探讨因果推断的最…

【Java从入门到精通】Java注释

Java 注释 在计算机语言中&#xff0c;注释是计算机语言的一个重要组成部分&#xff0c;用于在源代码中解释代码的作用&#xff0c;可以增强程序的可读性&#xff0c;可维护性。 Java 注释是一种在 Java 程序中用于提供代码功能说明的文本。 注释不会被编译器包含在最终的可…

FANUC机器人如何清除示教器右上角的白色感叹号?

FANUC机器人如何清除示教器右上角的白色感叹号&#xff1f; 如下图所示&#xff0c;示教器上显示白色的感叹号&#xff0c;如何清除呢&#xff1f; 具体可参考以下步骤&#xff1a; 按下示教器上白色的“i”键&#xff0c;如下图所示&#xff0c; 如下图所示&#xff0c;按…