王道代码版单链表头插法,不带头的头插法,尾插法,不带头的尾插法的总结
在编译器上面编译发现很容易控制台打印不出来,这可能就是细节所在,但是网上也没有很全的全代码输出的案例.我做题的感觉写的是对的其实并不对,你只是第六感感觉是对的仅此而已!!!要注意引以为戒,下面总结一下我自己写的可以运行的非伪码
首先定义结构体
typedef int Elemtype;
//定义结构体
typedef struct node{Elemtype data;struct node * next;
}LNode,*LinkList;
1.1⚠️
头插法建立单链表
//1.1⚠️
//头插法建立单链表
LinkList List_HeadInsert(LinkList L){LNode *s;int x;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;scanf("%d",&x);while(x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=L->next;L->next=s;scanf("%d",&x);}return L;
}
1.2⚠️
头插法建立不带头结点的单链表
//1.2⚠️
//头插法建立不带头结点的单链表
LinkList List_HeadInsert2(LinkList L){LNode *s;int x;//L->next=NULL;这句代码放这里不对!!!scanf("%d",&x);while(x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=NULL;if(NULL == L){L=s;}else{s->next=L;L=s;}scanf("%d",&x);}return L;
}
2.1⚠️
尾插法建立单链表
//2.1⚠️
//尾插法建立单链表
LinkList List_TailInsert(LinkList L){int x;L=(LinkList)malloc(sizeof(LNode));LNode *s ,*r=L;//这句很重要不能写最前面!!!一定要记住scanf("%d",&x);while (x!=9999){s=(LNode *)malloc(sizeof(LNode));s->data=x;r->next=s;r=s;scanf("%d",&x);}r->next=NULL;return L;}
2.2⚠️
尾插法建立不带头结点的单链表
//2.2⚠️
//尾插法建立不带头结点的单链表
LinkList List_TailInsert2(LinkList L){LNode *s,*r;int x;scanf("%d",&x);while (x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=NULL;if(NULL==L){L=s;//将新结点位置首节点也是尾结点r=L;}else{r->next=s;r=s;}scanf("%d",&x);}r->next=NULL;return L;
}
⚠️鉴于数据结构书上只有函数代码的书写但是控制台到底如何打印出来这链表的,不是直接在主函数定义就可以的,我们需要额外准备打印函数
3.1
带有头结点的打印方法
//带有头结点的方法
//不管是头插还是尾插最后都要输出一下,这就需要输出函数一下
//定义一个打印函数
void PrintList(LinkList L)
{LinkList p;p=L->next;printf("链表元素如下:\n");while(p!=NULL){printf("%d ",p->data);//记得给%D_空个格p=p->next;}printf("\n");
}
3.2
带有不带头结点的打印方法
//不带有头结点的方法
//不管是头插还是尾插最后都要输出一下,这就需要输出函数一下
//定义一个打印函数
void PrintList2(LinkList L)
{LinkList p;p=L;printf("链表元素如下:\n");while(p!=NULL){printf("%d ",p->data);//记得给%D_空个格p=p->next;}printf("\n");
}
最后主函数
int main() {LinkList L11, L12,L21,L22;//1.1头插法建立单链表printf("头插法建立单链表,输入值(9999结束)\n");L11 = List_HeadInsert(L11);PrintList(L11);//1.2头插法建立单链表printf("头插法建立不带头的单链表,输入值(9999结束)\n");L12 = List_HeadInsert2(L12);PrintList2(L12);//2.1尾插法建立单链表printf("尾插法建立单链表,输入值(99999结束)\n");L21=List_TailInsert(L21);PrintList(L21);//2.2尾插法建立不带头单链表printf("尾插法建立不带头的单链表,输入值(99999结束)\n");L22=List_TailInsert2(L22);PrintList2(L22);
}
ps:若还不是很清楚库的设定,我po一下全部代码,直接粘贴到你的编译器里面就可以运行
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int Elemtype;
//定义结构体
typedef struct node{Elemtype data;struct node * next;
}LNode,*LinkList;
//1.1⚠️
//头插法建立单链表
LinkList List_HeadInsert(LinkList L){LNode *s;int x;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;scanf("%d",&x);while(x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=L->next;L->next=s;scanf("%d",&x);}return L;
}
//1.2⚠️
//头插法建立不带头结点的单链表
LinkList List_HeadInsert2(LinkList L){LNode *s;int x;//L->next=NULL;这句代码放这里不对!!!scanf("%d",&x);while(x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=NULL;if(NULL == L){L=s;}else{s->next=L;L=s;}scanf("%d",&x);}return L;
}
//2.1⚠️
//尾插法建立单链表
LinkList List_TailInsert(LinkList L){int x;L=(LinkList)malloc(sizeof(LNode));LNode *s ,*r=L;//这句很重要不能写最前面!!!一定要记住scanf("%d",&x);while (x!=9999){s=(LNode *)malloc(sizeof(LNode));s->data=x;r->next=s;r=s;scanf("%d",&x);}r->next=NULL;return L;}
//2.2⚠️
//尾插法建立不带头结点的单链表
LinkList List_TailInsert2(LinkList L){LNode *s,*r;int x;scanf("%d",&x);while (x!=9999){s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=NULL;if(NULL==L){L=s;//将新结点位置首节点也是尾结点r=L;}else{r->next=s;r=s;}scanf("%d",&x);}r->next=NULL;return L;
}
//带有头结点的方法
//不管是头插还是尾插最后都要输出一下,这就需要输出函数一下
//定义一个打印函数
void PrintList(LinkList L)
{LinkList p;p=L->next;printf("链表元素如下:\n");while(p!=NULL){printf("%d ",p->data);//记得给%D_空个格p=p->next;}printf("\n");
}
//不带有头结点的方法
//不管是头插还是尾插最后都要输出一下,这就需要输出函数一下
//定义一个打印函数
void PrintList2(LinkList L)
{LinkList p;p=L;printf("链表元素如下:\n");while(p!=NULL){printf("%d ",p->data);//记得给%D_空个格p=p->next;}printf("\n");
}int main() {LinkList L11, L12,L21,L22;//1.1头插法建立单链表printf("头插法建立单链表,输入值(9999结束)\n");L11 = List_HeadInsert(L11);PrintList(L11);//1.2头插法建立单链表printf("头插法建立不带头的单链表,输入值(9999结束)\n");L12 = List_HeadInsert2(L12);PrintList2(L12);//2.1尾插法建立单链表printf("尾插法建立单链表,输入值(99999结束)\n");L21=List_TailInsert(L21);PrintList(L21);//2.2尾插法建立不带头单链表printf("尾插法建立不带头的单链表,输入值(99999结束)\n");L22=List_TailInsert2(L22);PrintList2(L22);return 0;}
王道代码版单链表头插法,不带头的头插法,尾插法,不带头的尾插法的总结相关推荐
- C语言版单链表:按序号查找结点值和按值查找表结点的代码总结
先上函数模块 按序号查找结点 //按序号查找结点 LNode *GetElem(LinkList L,int i){int j=1;LNode *p=L->next;if(i==0)return ...
- 单链表的建立(C语言):头插法和尾插法建立单链表
采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后,如图2-4所示. 图2-4 头插法建立单链表 头插法建 ...
- 单链表建立的两种方法 头插法和尾插法
目录: 方法1:头插法 方法2:尾插法 方法1:头插法 基本思路: 定义一个链表类型的指针l,指针l指向的是链表的首地址,而不是链表的第一个数,指针l指向的下一个链表类型才是链表的第一个数,每次往链表 ...
- 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现
文章目录 节点类 链表类(主要) 测试类 小结 节点类 可以根据需要,对节点属性进行修改.注意重写toString()方法,以便后续的输出操作. //节点类 class Node {public in ...
- C语言版--单链表排序,冒泡排序,选择排序,插入排序,快速排序,应有尽有,保证看懂,没有bug!交换节点版本!
一.废话不多说,直接上代码.如果想看双向循环链表的朋友,可以在我的博客里找. 你好 #include <stdio.h> #include <stdlib.h>typedef ...
- 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】
文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...
- 浅谈:数据结构之单链表,java代码演示单链表
单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...
- Java版单链表讲解
链表介绍 链表是有序的列表,但是它在内存中是存储如下 1.链表是以节点的方式来存储,是链式存储 2.每个节点包含 data 域, next 域:指向下一个节点. 3.如图:发现链表的各个节点不一定是连 ...
- 单链表-单链表A拆分为A(偶)和C(奇) (尾插法建表)
题意: 有一个整数元素建立的单链表A,设计一个算法,将其拆分成两个链表A 和B,使得链表A中含有所有偶数的结点,B链表中含有所有的奇数结点.且保持原来的相对次序. 单链表的存储结构: typedef ...
最新文章
- 深度学习(5)感知机(神经元)与神经网络
- matplotlib可视化基本散点图、在图像指定区域绘制方框(Draw Rectangle)
- Codeforces 1159A A pile of stones
- boost::hana::id用法的测试程序
- VSTS TFS 强制删除签出锁定项 解除 锁定
- Flask框架——上下文、flask_script扩展
- kafka结合mysql_logstash集成kafka,mysql实现数据采集
- linux 下qt 中关于字符集及其转换
- JAVA 基础练习题
- OTFS学习记录3——MRC接收机
- 平谷php,平谷区行政区划_行政区划网(区划地名网) www.xzqh.org
- Win11 ARM64深度解析
- Java爬虫系列之二网页解析【爬取知乎首页信息】
- 【产品经理】AARRR模型
- 【Cesium入门】四、相机系统
- Build和Rebuild的区别
- 极大似然估计详解,写的太好了!
- selenium 淘宝登陆购买,基础实现
- 读《卓有成效的管理者》笔记
- svn提示xxx文件已经过时