数据结构day06(单向循环链表、双向链表)

news2024/12/23 17:09:20

双向链表的练习代码

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int database;
typedef struct double_link_list{
	union{
		database data;
		int len;
	};
	struct double_link_list* pre;
	struct double_link_list* next;

}dbLinkList,*dbLinkListp;

dbLinkListp head_create();
dbLinkListp create(database data);
int head_insert(dbLinkListp head,database data);
int tail_insert(dbLinkListp head,database data);
int output(dbLinkListp head);
int head_delete(dbLinkListp head);
int tail_delete(dbLinkListp head);
int pos_insert(dbLinkListp head,int pos,database data);
int pos_delete(dbLinkListp head,int pos);

#endif

fun.c

#include "head.h"
/*
 * function:    头结点创建
 * @param [ in] 
 * @param [out] 
 * @return      
 */
dbLinkListp head_create(){
	dbLinkListp head=(dbLinkListp)malloc(sizeof(dbLinkList));
	if(NULL==head){
		puts("malloc is NULL,failed");
		return NULL;
	}
	head->pre=NULL;
	head->next=NULL;
	head->len=0;
	return head;
}
/*
 * function:    创建节点
 * @param [ in] 
 * @param [out] 
 * @return      
 */
dbLinkListp create(database data){
	dbLinkListp new=(dbLinkListp)malloc(sizeof(dbLinkList));
	if(NULL==new){
		puts("malloc is NULL,failed");
		return NULL;
	}
	new->data=data;
	new->pre=NULL;
	new->next=NULL;
	puts("node create success");
	return new;
}
/*
 * function:    判空
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int void_point(dbLinkListp head){
	if(NULL==head){
		puts("----why give me a null head point----");
		return -1;
	}
	return 0;
}
/*
 * function:    头插
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int head_insert(dbLinkListp head,database data){
	if(void_point(head))
		return -1;
	//头插
	dbLinkListp new=create(data);
	new->next=head->next;
	if(head->next!=NULL)
		new->next->pre=new;
	head->next=new;
	new->pre=head;

	head->len++;
	puts("head insert success");
	return 0;
}
/*
 * function:    尾插
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int tail_insert(dbLinkListp head,database data){
	if(void_point(head))
		return -1;
	//尾插
	dbLinkListp p=head;
	while(p->next!=NULL)
		p=p->next;
	dbLinkListp new=create(data);

	new->next=p->next;
	new->pre=p;
	p->next=new;

	head->len++;
	puts("tail insert success.");
	return 0;
}
/*
 * function:    输出
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int output(dbLinkListp head){
	if(void_point(head))
		return -1;
	while(head->next!=NULL){
		printf("%d\t",head->next->data);
		head=head->next;
	}
	puts("output done");
	return 0;
}
/*
 * function:   头删
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int head_delete(dbLinkListp head){
	if(void_point(head))
		return -1;
	if(head->next==NULL){
		puts("there is no assignment to delete.");
		return -1;
	}
	dbLinkListp del=head->next;
	if(head->next->next!=NULL)
	head->next->next->pre=head;
	head->next=head->next->next;

	free(del);
	del=NULL;
	head->len--;
	puts("head_delete success");
	return 0;
}
/*
 * function:    尾删
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int tail_delete(dbLinkListp head){
	if(void_point(head))
		return -1;
	if(head->next==NULL){
		puts("there is no assignment to delete.");
		return -1;
	}
	dbLinkListp p=head;
	//找到倒数第一个
	while(p->next!=NULL){
		p=p->next;
	}
	p->pre->next=p->next;
	free(p);
	p=NULL;
	head->len--;
	puts("tail delete success");
	return 0;
}
/*
 * function:    指定位置插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int pos_insert(dbLinkListp head,int pos,database data){
	if(void_point(head))
		return -1;

	//判断位置合理性
	if(pos<1||pos>head->len+1){
		puts("your position is illegal");
		return -1;
	}
	dbLinkListp p=head;
	//找到指定位置前一位
	while(pos--!=1){
		p=p->next;
	}
	dbLinkListp new=create(data);

	if(p->next!=NULL){
		new->next=p->next->next;
		p->next->next->pre=new;
	}
	new->pre=p;
	p->next=new;

	head->len++;
	puts("pos insert success");
	return 0;
}
/*
 * function:    指定位置删除
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int pos_delete(dbLinkListp head,int pos){
	if(void_point(head))
		return -1;
	if(head->next==NULL){
		puts("there is no assignment to delete.");
		return -1;
	}
	//判断位置合理性
	if(pos<1||pos>head->len){
		puts("your position is illegal");
		return -1;
	}
	dbLinkListp p=head;
	//找到指定位置前一位
	while(pos--!=1){
		p=p->next;
	}
	printf("pos-1=%d\t",p->data);
	//删除
	dbLinkListp del=p->next;
	p->next=p->next->next;
	if(p->next!=NULL)
		p->next->pre=p;

	free(del);
	del=NULL;
	puts("pos delete success");
	return 0;
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	dbLinkListp head=head_create();
	head_insert(head,9);
	head_insert(head,8);
	head_insert(head,6);
	head_insert(head,5);
	tail_insert(head,7);
	output(head);
	//head_delete(head);
	//tail_delete(head);
	//pos_insert(head,6,66);
	//pos_delete(head,5);
	output(head);


	return 0;
}

今日思维导图哈

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

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

相关文章

C# 添加现有的窗体的时候,为何窗体的控件不显示了?

背景 有的项目中一些功能是可以复用的&#xff0c;将原始项目中的窗体文件添加到新项目时&#xff0c;发现有一些问题。添加完之后&#xff0c;打开的窗体发现没有显示任何控件&#xff0c;窗体的大小还变小了&#xff1f; 原始的添加操作 将Form1.cs Form1.resx Form1.Desi…

Vue2.0 的响应式原理 私

原理&#xff1a; 通过数据劫持 defineProperty 发布订阅者模式&#xff0c;当 vue 实例初始化后 observer 会针对实例中的 data 中的每一个属性进行劫持并通过 defineProperty() 设置值后在 get() 中向发布者添加该属性的订阅者&#xff0c; 使用的Object.defineProperty()…

数据治理与数据安全治理思考

大数据经过多年发展&#xff0c;在不同的业务场景下得到深入应用&#xff0c;在企业提升经营目标、促进经营决策&#xff0c;以及通过大数据应用促进经济发展、优化民生工程、解决生活服务便捷等场景起到了重要作用。特别是十九届四中全会史无前例的将“数据”作为新型生产要素…

用Java实现Huffman编码

文章目录 前言一、实现思路二、准备Huffman结点三、主要实现 前言 在使用http1.1协议传输数据的时候&#xff0c;会有一些固定的字段&#xff0c;比如cookie、编码方式、接收的数据类型&#xff0c;另外会有一些大量重复的字段造成请求报文过于冗长&#xff0c;为了解决这个问…

执行SQL文件出现【Unknown collation “utf8mb4_0900_ai_ci”】的解决方案

执行SQL文件出现【Unknown collation “utf8mb4_0900_ai_ci”】的解决方案 一、背景描述二、报错原因三、解决方案 一、背景描述 从服务器MySQL中导出数据为SQL执行脚本后&#xff0c;在本地执行导出的SQL脚本。 报错&#xff1a;Unknown collation “utf8mb4_0900_ai_ci” …

pdf如何删除其中一页?了解一下这几种删除方法

pdf如何删除其中一页&#xff1f;随着电子文档的广泛应用&#xff0c;PDF已成为最常见的文档格式之一。然而&#xff0c;有时候你可能会发现&#xff0c;你的PDF文档中包含了一些多余的页面&#xff0c;或者你需要删除其中的某一页。那么&#xff0c;该如何删除PDF中的页面呢&a…

基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的汽车租赁管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经…

YOLO目标检测——花蕊分类检测数据集下载分享

花蕊分类检测数据集共同7300图片&#xff0c;103类别&#xff0c;分别放在103个文件夹中&#xff0c;可应用于&#xff1a;植物学研究、花卉市场和园艺业、智能农业、视觉搜索引擎、等等 数据集点击下载&#xff1a;YOLO花蕊分类检测数据集7300图片102种类别.rar

2023.8.29 关于性能测试

目录 什么是性能测试&#xff1f; 性能测试常见术语及其性能测试衡量指标 并发 用户数 响应时间 事务 点击率 吞吐量 思考时间 资源利用率 性能测试分类 基准性能测试 负载性能测试 压力性能测试 可靠性性能测试 性能测试执行流程 什么是性能测试&#xff1f; 性…

【USRP】集成化仪器系列3 :频谱仪,基于labview实现

USRP 频谱仪 1、设备IP地址&#xff1a;默认为192.168.10.2&#xff0c;请勿 修改&#xff0c;运行阶段无法修改。 2、天线输出端口是TX1&#xff0c;请勿修改。 3、通道&#xff1a;0 对应RF A、1 对应 RF B&#xff0c;运行 阶段无法修改。 4、中心频率&#xff1a;当需要…

AndroidStudio3.5.2修改项目项目包名

公司项目要打造成产品进行演示&#xff0c;需要更换不同的包名进行安装在同一设备上&#xff0c;即所谓的马甲包 更改步骤基本一样 https://blog.csdn.net/qq_35270692/article/details/78336049 需要注意的是&#xff0c;按照上边的步骤修改完后&#xff0c;如果项目中有数据…

百度垂类离线计算系统发展历程

作者 | 弘远君 导读 本文以百度垂类离线计算系统的演进方向为主线&#xff0c;详细描述搜索垂类离线计算系统发展过程中遇到的问题&#xff0c;以及对应的解决方案。架构演进过程中一直奉行“没有最好的架构&#xff0c;只有最合适的架构”的宗旨&#xff0c;面对不同阶段遇到的…

C++语法基础

这里写目录标题 基础语法第一个程序变量常量的定义关键字标识符命名 &#xff08;变量命名&#xff09;sizeof的使用实型&#xff08;浮点型&#xff09;字符型转义字符字符串的定义 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 基础语法 第一个程序 …

Lua学习(一)

lua基础学习 LUA 语言1. 什么是lua&#xff1f;1.1 准备工作 2. 基本语法2.1 注释2.2 标识符2.3 关键字2.4 全局变量 3. 数据类型4. 变量4.1 赋值语句 5. 循环5.1 while循环5.2 for循环5.3泛型for循环5.4 repeat until 循环5.5 break 语句 6. 流程控制6.1 if语句6.2 if else 语…

数学建模:数据的预处理

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 数据预处理数据变换数据清洗缺失值处理异常值处理 数据预处理 数据变换 常见的数据变换的方式&#xff1a;通过某些简单的函数进行数据变换。 x ′ x 2 x ′ x x ′ log ⁡ ( x ) ∇ f ( x k )…

ZLMediaKit 各种推拉流

1 用ffmpeg 推音视频流 ./ffmpeg -f dshow -i video"HP Wide Vision HD Camera" -f dshow -i audio"麦克风阵列 (Realtek High Definition Audio)" -rtbufsize 100M -max_delay 100 -pix_fmt yuv420p -tune zerolatency -c:v libx264 -crf 18 -s 1280x720…

java八股文面试[多线程]——synchronized锁升级过程

速记&#xff1a;偏向-轻量-重量 锁膨胀 上面讲到锁有四种状态&#xff0c;并且会因实际情况进行膨胀升级&#xff0c;其膨胀方向是&#xff1a;无锁——>偏向锁——>轻量级锁——>重量级锁&#xff0c;并且膨胀方向不可逆 一.锁升级理论. 在synchronized锁升级过程…

Kotlin学习之密封类

Kotlin中的密封类: kotlin中的密封类&#xff0c;用关键词Sealed修饰&#xff0c;且还有一个规定&#xff1a;Sealed类的子类应该是Sealed类的嵌套类&#xff0c;或者应该在与Sealed类相同的文件中声明。 当我们想定义一个有相同父类&#xff0c;但是有不同子类的时候&#xf…

面试中的系统设计:应对复杂问题的方法与技巧

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

巨人互动|游戏出海游戏出海的趋势如何

随着全球游戏市场的不断扩大和消费者需求的多元化&#xff0c;游戏出海作为游戏行业的重要战略之一&#xff0c;正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势&#xff0c;探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&2023国内游戏厂商加快“出海”发…