在进行单链表的基本运算之前必须先建立单链表,建立单链表的常用方法有两种:头插法建表和尾插法建表

头插法建表,从一个空表开始,读取字符数组a中的字符,生成新节点,将读取的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到读完字符数组a的所有元素为止。

头插法建表虽然简单,但生成的链表中节点的次序和原数组的次序相反,若希望两者的次序一致,可采用尾插法建立

尾插法建表,该算法是将新节点插到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾节点

前插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;typedef struct Node {ElemType data;               struct Node *next;
}Node,*LinkedList;LinkedList LinkedListInit() {Node *L;L = (Node *)malloc(sizeof(Node)); if(L == NULL) { printf("申请内存空间失败\n");}L->next = NULL;                  return L;
}LinkedList LinkedListCreatH() {Node *L;L = (Node *)malloc(sizeof(Node));   L->next = NULL;                     ElemType x;                         while(scanf("%d",&x) != EOF) {Node *p;p = (Node *)malloc(sizeof(Node));    p->data = x;                      p->next = L->next;                    L->next = p; }return L;
} LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) {Node *pre;                     pre = L;int tempi = 0;for (tempi = 1; tempi < i; tempi++) {pre = pre->next;                  }Node *p;                                p = (Node *)malloc(sizeof(Node));p->data = x; p->next = pre->next;pre->next = p;return L;
} LinkedList LinkedListDelete(LinkedList L,ElemType x)
{Node *p,*pre;                    p = L->next;pre = L; /**************************添加上 per = L; 就行了原因 : 刚开始 per 没有赋值如果删除第一个元素 可能造成因为per为空指针的情况下指针失陪的情况 ***************************/while(p->data != x) {               pre = p; p = p->next;}pre->next = p->next;          free(p);return L;
} int findder(LinkedList L,int x) { //查找功能 /** @ x 所要查找的值 * @ L 所要操作的链表* 返回 -1 时表示链表中没有所在得值 */ LinkedList start; int i = 1;L = L->next;for (start = L;start != NULL;start = start->next) {if ( start->data == x ) {return i;}i++;} return -1;
}LinkedList Delete(LinkedList L,int st,int en) { // 多组数据删除功能 /** @ st 删除的起始位置 * @ en 删除的终止为止 * @ L 所要操作的的链表 */bool flag1 = false;Node *per,*p;per = L;L = L->next; int i = 1;LinkedList start;for (start = L;start != NULL ; start = start->next ) {if ( st == i ) {flag1 = true;}if ( en == i ) {per->next = start->next;break;}i++;if ( !flag1 )per = start;}return L;
}int main() {LinkedList list,start;printf("请输入单链表的数据:"); list = LinkedListCreatH();for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n");int i;ElemType x;printf("请输入插入数据的位置:");scanf("%d",&i);printf("请输入插入数据的值:");scanf("%d",&x);LinkedListInsert(list,i,x);for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n");printf("请输入要删除的元素的值:");scanf("%d",&x);LinkedListDelete(list,x); for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n"); return 0;
}

后插法

#include <stdio.h>
#include <stdlib.h>typedef int ElemType;typedef struct Node {ElemType data;               struct Node *next;
}Node,*LinkedList;LinkedList LinkedListInit() {Node *L;L = (Node *)malloc(sizeof(Node)); if(L == NULL) { printf("申请内存空间失败\n");}L->next = NULL;                  return L;
}void LinkedListCreatH(LinkedList &list) {Node *L,*s;list = new Node; list->next = NULL;L = list; ElemType x;while ( ~scanf("%d",&x) ) {s = new Node;  s->data = x; s->next = L->next; L->next = s;L = s;}
} LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) {Node *pre;                     pre = L;int tempi = 0;for (tempi = 1; tempi < i; tempi++) {pre = pre->next;                  }Node *p;                                p = (Node *)malloc(sizeof(Node));p->data = x; p->next = pre->next;pre->next = p;return L;
} LinkedList LinkedListDelete(LinkedList L,ElemType x)
{Node *p,*pre;                    p = L->next;pre = L;while(p->data != x) {               pre = p; p = p->next;}pre->next = p->next;          free(p);return L;
} int main() {LinkedList list,start;printf("请输入单链表的数据:"); LinkedListCreatH(list);for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n");int i;ElemType x;printf("请输入插入数据的位置:");scanf("%d",&i);printf("请输入插入数据的值:");scanf("%d",&x);LinkedListInsert(list,i,x);for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n");printf("请输入要删除的元素的值:");scanf("%d",&x);LinkedListDelete(list,x); for(start = list->next; start != NULL; start = start->next) {printf("%d ",start->data);}printf("\n"); return 0;
}

数据结构—链表的前插法与后插法相关推荐

  1. 牛顿前插公式与后插公式简单例子 BIT数值分析5.5

    题目 思路 公式: 牛顿前插公式 牛顿后插公式 尽量方法一般化,而不是针对某个题目 应该有更简单的方法,但是我没有查资料,直接就上手了 (就这写了好久,脑壳疼,不说了) 代码 # 牛顿前插后插公式 i ...

  2. 单链表基本操作的实现——前插法与后插法创建单链表

    一.前插法创建单链表 算法步骤: (1)创建一个只有头结点的空链表. (2)根据创建链表包括的元素n,循环n次以下操作: 生成新结点:-->输入元素值赋给新结点数据域:-->将新结点插入到 ...

  3. 链表笔记 (前插法 后插法 头插法 尾插法)

    链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...

  4. c语言单链表的创建(头插法和尾插法)

    概念: 单链表的建立: 头插法:元素插入在链表的头部,也叫做前插法. 尾插法:元素插入在链表的尾部,也叫做后插法. 头插法: 方法1: 步骤: 1)创建一个空链表(含头结点) 2)再创建一个需要插入的 ...

  5. 单链表的前插法和后插法创建

    根据结点插入位置的不同,链表的创建方法可分为前插法和后插法 前插法 前插法是通过将新节点逐个插入链表的头部(头节点之后)来创建链表,每次申请一个新节点,读入相应的数据元素值,然后将新节点插入到头节点之 ...

  6. 单链表的前插法和后插法

    #include<stdio.h> #include<stdlib.h> typedef struct Link{int elem;struct Link *next; }li ...

  7. 单链表前插法 后插法落地实现代码(自用)#c

    #include<iostream> using namespace std; //前插法创建一个单链表 //1.初始化(课本代码) //单链表存储结构 typedef struct LN ...

  8. 算法与数据结构【30天】集训营——线性表之易混淆知识点双链表的结点前插和后插(05)

    目录 双链表的插入 P结点后插入新的结点S(后插案例) P结点前插入新的结点q(前插案例) 每文一语 双链表的插入 在双链表的插入操作,我们比较头疼的就是,明明选项看着答案都是比较的完整,但是为啥就是 ...

  9. 数据结构单链表:指定结点的前插、后插操作

    指定结点的前插操作 typedef struct LNode{int data;struct LNode *next; }LNode, *LinkList;//在p结点之前插入元素e bool Ins ...

最新文章

  1. 深度学习Deep learning From Image to Sequence
  2. LiveVideoStack线上分享第三季(十):Flutter浪潮下的音视频研发探索
  3. fatal: unable to access 'xxxxxxxxxxxxx':The requested URL returned error: 403
  4. dataoutputstream.write 有时无法发送_RTK实操——CORS官方网教您如何解决RTK无法固定的问题...
  5. java运行环境_Windows系统java运行环境配置 | 吴文辉博客
  6. 机器学习算法(4)——SVM(以及拉格朗日对偶问题)
  7. tsm2812通用定时器中断_通用定时器中断(TIM2)
  8. 华为机试HJ10:字符个数统计
  9. 搭建Hive远程模式初始化的时候报错Access denied for user ‘root‘@‘node1‘(using password:YES)
  10. 使用 LwIP TCP/IP 栈,在 STM32Cube 上开发应用
  11. 【Love2d从青铜到王者】第十二篇:Love2d之碰撞检测(Detecting collision)
  12. mysql57免安装教程_mysql5.7免安装版配置教程
  13. Tomcat和Was服务器中文乱码问题总结
  14. 刘华:上云后,你的架构设计可以更飞
  15. CSS学习笔记——搭建京东购物车网页
  16. 双目视觉目标追踪及三维坐标获取—python(代码)
  17. 初学AI---一个小实验练练手儿
  18. python倒三角形脸适合什么发型_白银超琪美发老师教你如何借助脸部轮廓找出适合自己的发型...
  19. 《软件测试》[(美)Ron Patton]第十二章阅读总结
  20. 【毕业设计】52-基于单片机的车厢智能烟雾报警器设计与仿真(原理图_仿真_配套设计文档_PPT_流程图_外文翻译)

热门文章

  1. 如何解决微信测试公众号配置失败的问题
  2. selenium 代理
  3. java httponly设置_cookie 设置 httpOnly属性
  4. php setcookie httponly,SetCookie 未配置 HttpOnly、Secure
  5. 电子线路设计技巧8:UC3843A升压电路中电压反馈环节的设计方法
  6. MPC系列-混淆电路
  7. 路由简易安全配置方案
  8. 红石电子学——与、或、非 逻辑门
  9. uglifyjs的使用(对js的压缩混淆)
  10. uefi启动linux过程_Linux UEFI与备份还原(引导修复)