c语言单链表的基本操作

2023-05-16

该程序包含了链表的头插法、尾插法、求表长、按位查找、按值查找、插入、删除、销毁等几种操作;

#include <stdio.h>
#include <stdlib.h> //malloc和free都需要这个系统库函数头文件; 
	typedef struct node//这里一定要有结构体变量名 
	{
		char data;
		struct node *next;
	 }listnode;
	 typedef listnode* linklist;
	 linklist head;//一般像这样经常要调用的头指针,定义在全局外面;head是一个没有空间的指针类型; 
	 
	 
	 linklist creatlistr()//创建尾插法,有头节点;有返回值为linklist类型; 
	 {
	 	char ch; 
	 	listnode *s,*r;     //此处定义两个指针,没有空间 ; 
	 	head=(listnode*)malloc(sizeof(listnode));      //创建一个头节点; 
	 	if(head==NULL)
	 	{
	 	    printf("申请存储空间失败");return head;	//此处返回值为链表(结构体)类型,所以函数声明为linklist类型 
		}
		r=head;    //r是辅助作用; 
		printf("请输入链表各个结点的数据(尾插字符型):");
		while((ch=getchar())!='\n')
		{
			s=(listnode*)malloc(sizeof(listnode));   // 创建一个结点; 分配空格键给地址,不用加*号; 
			if(s==NULL)
			{
				printf("申请存储空间失败");break; 
			}
			s->data=ch;    //赋值data 
			r->next=s;     //同时指向head结点的r的next链接新节点 
			r=s;      //r指针指向这个结点,以此类推; 
		 } 
	 }
	 
	  linklist creatlistf()//创建头插法 
	 {
	 	char ch; 
	 	listnode *s;//定义结点指针 ; 
	 	head=NULL;//将头指针指向空; 
	 	printf("请输入链表各个节点的数据(头插字符型)");
		while((ch=getchar()!='\n'))//按enter键结束; 数据倒序输入; 
		{
			s=(listnode*)malloc(sizeof(listnode));//获取一个新的链表空间; 
			if(s==NULL)
			{
			printf("空间申请失败");break; 
		    }
		    s->data=ch;
		    s->next=head;//插入第一个元素不太好理解,第二个就好; 
		    head=s;//把s接到head后面; 
		} 
		return head;//空; 
	 }
	 
	 listnode *locadelist(int i)//查找第i个元素;linklist定义一个新的链表,返回值不是NULL,就是p的地址; 
	 {
	 	listnode *p=head->next;               //这是在已经建立链表的基础上实现的; 
	 	int j=1;
	 	while(p&&j<i)//为空跳出;等于i跳出; 
	 	{
	 		p=p->next;//一个接着一个指下去; j指向位置,p指向值;找到了位置,返回值,值没找到,返回空; 
	 		j++;
		 }
		if(j==i)
		return p;//如果找到了第i个元素,就输出p的值 
		else
		return NULL; 
	 }
	 
	 char valuelist(char i)//linklist定义一个新的链表,返回值不是NULL,就是p的地址; 
	 {
	 	listnode *p=head->next;//定义一个指向头节点的指针; 
	 	while(p&&i!=p->data)//为空跳出;等于i跳出; 
	 	{
	 		p=p->next;//一个接着一个指下去; 
		 }
		if(p==NULL)
		printf("没有查找到该数据"); 
		else
		return p->data;
	 }
	 
	 int insertlist(char x,int i)//插入; 
	 {
	 	listnode *p,*g;
	 	p=locadelist(i-1);    //插入的前提是先查找; 
	 	if(p==NULL)
	 	{
	 	printf("没有找到该结点");return 0;
	    }
	 	g=(listnode *)malloc(sizeof(listnode));
	 	if(g==NULL)
	 	{
	 		printf("申请存储空间失败");return 0; 
		}
		g->data=x;
		g->next=p->next;
		p->next=g;
		return 1; 
	 }
	 
	 int deletelist(int i)//删除;linklist定义一个新的链表,返回值不是NULL,就是p的地址; 
	 {
	 	listnode *a,*b;
	 	a=locadelist(i-1);//删除插入事先都要先查找 ;把要删除的前面那个数给p; 
		if(!a->next)
		{
			printf("未查找到"); return 0;   //空的不会执行,所以要加非空符号; 
		 } 
		b=a->next;
		a->next=b->next;
		free(b);//释放内存,但是;若使用a->next=a->next->next形式,最后释放a->next的时候, 相当于释放了a->next和a->next->next
		return 1;
	 }
	 
	 void destroylist() //销毁 
	 {
	 	listnode *c,*d;
	 	c=head;
	 	while(c)
	 	{
	 		d=c->next;
	 		free(d);    //此处只是清楚内内存单元,但是结构和指针还是存在; 
	 		c=d;
		 }
		c=NULL;//最后还省剩一个,直接为空; 
	 }
	 
	 int lengthlist()//表长;返回值是什么类型,这里就要定义为什么类型; 
	 {
	 	listnode *e=head->next;
	 	int j=0;
	 	while(e)//为空跳出;
	 	{
	 		e=e->next;//一个接着一个指下去; 
	 		j++;   //e一开始指向第一个,若e不是了空就加1; 
		 }
		 return j;//返回值为int类型; 
	 }
	 
	 void main()
	 {
	 	int i,n,y;
	 	char x,z;
	    creatlistr();
	    creatlistf();
	    printf("请输入查找的位置");
	    scanf("%d",&y);
	    locadelist(y);
	    printf("请输入查找的值");
	    scanf("%c",&z);
	 	printf("%c",valuelist(z));
	 	printf("请输入插入的字符型数值和被插入的位置:"); 
		scanf("%c",&x,&i); 
	 	insertlist(x,i);
	 	printf("请输入要删除的位置:");
		scanf("%d",&n); 
	 	deletelist(n);
	 	printf("表长为:%d",lengthlist());
	 }

各位兄弟,如果这篇文章对你有那么一点点的帮助的话,就给我一点鼓励点个赞吧,兄弟我在这里谢谢大家啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言单链表的基本操作 的相关文章

  • React 入门(超详细)

    目录 前言 xff1a 一 React 简介1 什么是 React2 React 的特点3 React 高效的原因4 React 官网5 React的主要原理6 Facebook为什么要建造React 二 React 的基本使用1 基础代码
  • React 面向组件编程(上)

    目录 前言 xff1a 一 组件的基本理解和使用1 函数式组件2 类式组件3 注意事项4 渲染函数式组件标签的基本流程5 渲染类组件标签的基本流程 二 组件三大核心属性 1 xff1a state1 代码示例2 效果展示3 注意4 设置状态
  • React 面向组件编程(下)

    目录 前言 xff1a 一 受控组件与非受控组件1 受控组件2 非受控组件3 效果展示4 总结 xff1a 二 组件的生命周期1 对生命周期的理解2 生命周期的三个阶段 xff08 旧 xff09 3 生命周期的三个阶段 xff08 新 x
  • React应用(基于React脚手架)

    目录 前言 xff1a 一 使用create react app创建react应用1 什么是 react 脚手架 xff1f 2 创建 cli 脚手架方式13 创建 cli 脚手架方式24 npx 5 react脚手架项目结构6 功能界面的
  • Tesseract(识别验证码)

    Tesseract windows 下的安装及简单应用 1 Tesseract安装以及简介 阻碍我们爬虫的 有时候正是在登录或者请求一些数据时候的图形验证码 因此这里我们讲解一种能将图片翻译成文字的技术 将图片翻译成文字一般被称为光学文字识
  • POJ 2893 M × N Puzzle——八数码有解条件

    题意 xff1a 给定M N的数码图 xff0c 问能否移动到最终状态 分析 有解的判定条件可见 八数码有解条件 值得一提的是 xff0c 这道题求逆序对卡树状数组 xff0c 只能用归并排序 include lt cstdio gt in
  • 【c语言典例一】十进制的数转化为二进制和八进制

    首先 xff0c 介绍十进制转二进制的方法 xff1a 十进制整数转换为二进制整数十进制整数转换为二进制整数采用 34 除2取余 xff0c 逆序排列 34 法 具体做法是 xff1a 用2整除十进制整数 xff0c 可以得到一个商和余数
  • C语言字符个数统计

    输入一行字符 xff08 字符个数小于80 xff09 xff0c 这行字符包括小写字母 xff0c 大写字母 xff0c 数字 xff0c 空格等其他可打印符号 请统计各字母的个数 xff0c 小写字母和大写字母统计于小写字母上 xff0
  • 【STC15单片机】按键&静态数码管显示0~9

    目录 数码管工作原理 共阳极数码管段码表 共阴极数码管段码表 矩阵键盘 amp 数码管综合应用 单片机型号说明 xff1a IAP15F2K61S2 新建工程时单片机型号选择STC15F2K60S2 本开发板支持的显示器件 xff1a LE
  • 字典查询python

    有字典 dict1 61 39 赵广辉 39 39 13299887777 39 39 特朗普 39 39 814666888 39 39 普京 39 39 522888666 39 39 吴京 39 39 13999887777 39 x
  • python中的序列(列表、元组、字符串)的切片操作

    目录 一 序列 二 序列常用操作 切片 注意 演示 一 序列 序列是指 内容连续 有序 xff0c 可使用下标索引的一类数据容器 列表 元组 字符串 xff0c 均可以可以视为序列 二 序列常用操作 切片 序列支持切片 xff0c 即 列表
  • 四,面向对象 ——类与对象

    面向对象的三大特征 xff1a 封装型 xff0c 继承性 xff0c 多态性 xff08 可能有些还会说有抽象性 xff09 类 xff08 class 和对象 xff08 object 是面向对象程序设计方法中最核心的概念 面向对象的两
  • POJ - 2823 滑动窗口

    题目 xff1a 给一个长度为 NN 的数组 xff0c 一个长为 KK 的滑动窗体从最左端移至最右端 xff0c 你只能看到窗口中的 KK 个数 xff0c 每次窗体向右移动一位 找出窗体在各个位置时的最大值和最小值 思路 xff1a 网
  • C语言十进制转八进制

    输入 12 输出 14 include lt stdio h gt int main int n scanf 34 d 34 amp n int i 61 0 int a 100 int count while 1 a i 61 n 8 n
  • Docker 中,对 MySQL配置文件修改

    步骤 1 docker ps span class token punctuation span a 查看docker内的镜像 2 进入容器 docker exec it 容器ID bin bash 3 找到MySQL的配置文件 mysql
  • 【Linux学习】进程间通信——system V(共享内存 | 消息队列 | 信号量)

    x1f431 作者 xff1a 一只大喵咪1201 x1f431 专栏 xff1a Linux学习 x1f525 格言 xff1a 你只管努力 xff0c 剩下的交给时间 xff01 进程间通信 共享内存 消息队列 信号量 x1f3c0 共
  • python_tkinter组件摆放方式

    1 最小界面组成 导入tkinter模块 import tkinter 创建主窗口对象 root 61 tkinter Tk 设置窗口大小 最小值 xff1a 像素 root minsize 300 300 创建一个按钮组件 btn 61
  • conda create -n yolov5_py36 python=3.6 出现Solving environment: failed”报错的解决办法

    该错误通常意味着Conda无法解决您的环境依赖关系 以下是可能的解决方案 xff1a 检查您的网络连接 xff1a 确保您的计算机已连接到互联网 xff0c 并且没有任何防火墙或代理阻止Conda访问所需的资源 清除Conda缓存 xff1
  • Ubuntu 20.04 系统迁移

    一 前言 现实工作中需要在Intel NUC上装一个Ubuntu 20 04系统 xff0c 并运行ROS以及相关的很多功能包 xff0c 但如果直接安装新新系统 xff0c 之前的大量环境变量要重新去配置 xff0c 所以考虑说将原先的U

随机推荐

  • 求十个数中的最大值流程图(思路之一)

  • 求100以内的偶数和

    一 文字描述 1 定义两个整型变量sum xff0c i xff1b 2 把0赋值给sum xff0c 2赋值给i xff1b 3 使sum 61 sum 43 i xff1b 4 如果i xff1c 61 100 xff0c 则返回第3步
  • 数据库总结(六):创建与使用存储过程

    目录 任务6 1 创建简单存储过程 1 PL SQL的变量 2 PL SQL的运算符及表达式 3 PL SQL的控制语句 4 MySQL的存储过程 任务6 2 创建带输入参数的存储过程 1 MySQL带输入参数的存储过程的创建 2 调用存储
  • 数据库总结(七):创建与使用触发器

    目录 任务7 1 创建触发器 1 触发器概述 2 创建触发器 任务7 2 查看及删除触发器 1 查看触发器 2 删除触发器 END 数据表中为了保证数据的完整性或执行其他特殊规则 xff0c MySQL除了提供约束之外 xff0c 还提供了
  • 数据库总结(8):数据库的安全性维护

    一 创建语句 1 添加数据库用户 insert into user host user password ssl cipher x509 issuer x509 subject values 主机号 用户名 password 密码 2 up
  • 『Java练习』面向对象程序练习

    编写一个类Calculate1 xff0c 实现加 减两种运算 xff0c 然后 xff0c 编写另一个派生类Calculate2 xff0c 实现乘 除两种运算 package object oriented development wo
  • C语言 冒泡法 比大小 从键盘输入10个整数,从他们从小到大输出的答案

    C语言 从键盘输入10个整数 xff0c 从他们从小到大输出的答案 方法 xff1a 冒泡法 通过举例子来介绍什么是冒泡法 xff0c 怎么比大小 xff1b 讲一下思路 xff1a 随便三个数 xff1a 5 xff0c 7 xff0c
  • 三点弯曲的有限元仿真

    0 概述 什么是三点弯曲 xff1f 三点弯曲变形有哪些特点 xff1f 三点弯曲仿真有哪些需要注意的地方 xff1f xff08 1 xff09 三点弯曲试验是将截面为矩形或圆形的试样放在弯曲装置上 xff0c 调整跨距 xff0c 在试
  • 视图篇——表格视图UITableView及控制器UITableViewController

    来自http www cnblogs com lovecode articles 2238309 html UITableViewController表格视图控制器 UITableViewController类继承自UIViewContro
  • JS 定时对象时,key加中括号表示什么意思

    对象key 加中括号是 取中括号中变量的内容 当做对象的key使用 xff0c 不加中括号 xff0c 则直接用该字符串当作对象的key 例如如下代码 xff1a var name 61 39 keyn 39 var a 61 name 3
  • 结构体案例2

    设计一个英雄的结构体 xff0c 包括成员姓名 xff0c 年龄 xff0c 性别 xff1b 创建结构体数组 xff0c 数组中存放5名英雄 通过冒泡排序 xff0c 将数组中的英雄按年龄进行升序排列 xff0c 最终打印排序后的结果 i
  • 第二周博客总结

    既然自己选择了学习算法 xff0c 便会一直坚持下去 xff0c 完成自己既定的目标 xff01 这一周下来 xff0c 按照自己既定的计划 xff0c 自己利用课余时间看深入浅出这本书 从第八章的初涉算法一直看到了第十七章的集合 xff0
  • 第四周ACM博客总结

    这一周基本对算法知识进行了一次细致的阅读 xff0c 自己也对算法知识有了更深一步的了解 这一周自己先将上周剩下的一点STL的内容补上了 xff0c 这些容器之间相似的地方有很多 xff0c 但都有各自的优点所在 xff0c 需要结合题目特
  • 第十四周DP算法总结

    这周自己主要再看DP算法的博客 xff0c 感觉DP这一部分内容确实比之前的都要麻烦一些 xff0c 最后攻克这一部分难题还是挺好的 这周自己总结了一些题型 xff0c 以及一些方法思路 xff0c 最后再把动态规划和之前的分治和贪心做一下
  • 深度理解卷积神经网络

    神经网络包括卷积层 xff0c 池化层 xff0c 全连接层 一个最简单的神经元结构 xff0c 假如有三个输入 xff0c 都对应一个权重参数 xff0c 然后通过权重加起来 xff0c 经过一个激活函数 xff0c 最后输出y CNN中
  • 花了半个多小时才发现的错误。。

    找了半天原来该写mapper的地方写成了service 结果光栈溢出 在找错误的过程中发现有些sql语句也写得不对 xff0c 单词拼错的 xff0c 后边多加逗号的 xff0c 某些html语句后边多写逗号的 64 Service pub
  • 找了1个多小时才发现的错误。。

    如果只是跟着课本敲 xff0c 那就肯定报错了 好久没碰有点生疏了 之前敲过一个类似的加载properties的文件的方法 xff0c 直接把课本的这个改成这个就可以解决500的错误了 注释的地方是行不通的错误代码 xff01 xff01
  • 1. Python 的 print( )输出函数

    1 Python 的 print 输出函数 文章目录 1 Python 的 print 输出函数1 什么是print 函数2 print 函数的语法3 英文输入法4 敲下你的第一行代码5 print 函数的4种用法5 1 没有引号5 2 单
  • c语言顺序表的基本操作

    该代码段包含了几种比较常见的顺序表的基本操作 xff0c 有 xff1a 求表长 xff0c 按位取值 xff0c 按值取位 xff0c 插入和删除几种方式 xff1b include lt stdio h gt define listsi
  • c语言单链表的基本操作

    该程序包含了链表的头插法 尾插法 求表长 按位查找 按值查找 插入 删除 销毁等几种操作 xff1b include lt stdio h gt include lt stdlib h gt malloc和free都需要这个系统库函数头文件