一.单链表结点的类型定义:普通结构体变量或者指向结构体的指针变量

typedef int Elemtype;
typedef struct node
{Elemtype data;struct node *next;
}LNode,*Linklist;

声明的相对应操作:

LNode *h,*p;//定义一个结点
Linklist h,p;//定义头指针

(*p)表示p所指向的结点
(*p).data<=>p->data表示p指向结点的数据域
(*p).next<=>p->next表示p指向结点的指针域

二.申请一块LNode类型的存储单元的操作,并将其地址赋值给变量p

LNode *p;
p=new LNode;

三.链表的相关操作

(1)初始化:定义工作指针P,链表为带头结点的链表

void printlink(LinkList &L)
{LNode *p;p=L->next;while(p!=NUll){printf("%d\n",L->data);p=p->next;}
}

(2)链表的递归遍历操作

//正向输出链表
void out1(Linklist L)
{if(L){printf("%d\n",L->data);out1(L->next);}
}
//逆序输出链表
void out2(Linklist L)
{if(L){out2(L->next);printf("%d\n",L->data);}}

(3)求链表的长度

//求链表的长度
int linklength(Linklist H)
{LNode *p;int j=0;p=H->next;while(p!=NULL){j++;p=p->next;}return j;
}

(4)查找表中第i个位置的元素

Linklist touch(Linklist &H,int x)
{LNode *p;p=H->next;int j=0;while(p!=NUll&&j<x){p=p->next;j++;}if(p==NULL) {printf("无此元素\n");return NULL;}else return p;
}

(5)查找p的前驱节点

//查找前驱结点
LinkList  ListLocate2(LinkList H, LNode *p)
{LNode *pre;if(H->next==pre) {printf("此节点为首元结点,无前驱结点\n");return NULL;}pre=H->next;while(pre!=NULL&&pre->next!=p){pre=pre->next;}if(pre==NULL) {printf("找不到\n");return NULL;}else return pre;}

(6)查找p的后继结点

//查找后继结点
Linklist finddata(Linklist H,Elemtype e)
{LNode *p;p=H->next;while(p!=NULL&&p->data!=e){p=p->next;}if(p==NULL) {printf("找不到\n");return NULL;}else if(p->next==NULL)  {printf("此结点没有后继节点\n");return NULL;}else return p->next;
}

(7)插入新结点(在p结点之后插入)

void  Insert(LinkList H,LNode *p,int x)
{   LNode *s;s=new LNode;            //创建新结点s->data=x;                  //设置新结点的元素值s->next=p->next;    p->next=s;    //插入新结点
}

(8)插入新结点(在p结点之前插入)

void  Insert(LinkList H,LNode *p,int x)
{LNode *pre,*s;pre=H;while(pre!=NULL&&pre->next!=x)pre=pre->next;if(pre==NULL){printf("无p节点\n");return ;}s->data=x;s->next=pre->next;pre->next=s;
}

(9)头插法创建链表:时间复杂度为O(n),可以实现逆序操作

Linklist1 creat()//头插法
{Linklist L,p;L=new LNode;L->next=NULL;scanf("%d",&x);while(x!=flag){p=new LNode;p->data=x;p->next=L->next;L->next=p;scanf("%d",&x);}return L;
}

(10)尾插法创建链表,要定义尾指针,时间复杂度为O(n)

Linklist2 creat()
{Linklist L,p;L=new LNode;L->next=NULL;r=L;scanf("%d",&x);while(x!=flag){p=new LNode;p->data=x;p->next=r->next;r->next=p;r=p;scanf("%d",&x)}return L;
}

(11)合并两个(非递减有序)链表

Linklist Union(Linklist La,Linklist Lb)
{LNode *pa,*pb,*pc,*Lc;pa=La->next;pb=Lb->next;Lc=La;pc=pa;while(pa&&pb){if(pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;}else {pc->next=pb;pc=pb;pb=pb->next;}}if(pa) pc->next=pa;else pc->next=pb;delete Lb;return Lc;
}

数据结构——单链表操作(一)——基础用法相关推荐

  1. 数据结构[单链表]操作大全(初始化,创建,插入,查询,删除,长度,输出)c++代码实现

    今晚上干了许久的链表 看见指针就头大的我真的是头皮发麻了一晚上 代码中写有注释,虽然不是太详细,但是了指针熟练的同学应该可以看懂 main函数中请自由发挥 #pragma GCC optimize(3 ...

  2. 天勤考研数据结构———单链表操作

    定义单链表 typedef struct LNode{int data;struct LNode *next; }LNode; A\B皆为有序链表,合并排序到C中  头插法 void merge(LN ...

  3. 【1138】数据结构上机测试2-1:单链表操作A(顺序建表+删除节点)(SDUT)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000ms   Memory limit: 4096K  有疑问?点这里^_^ 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头 ...

  4. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  5. python 单链表是否有回路_(Python3)数据结构--单链表之判断链表是否有环

    前言 有Python基础 有数据结构单链表基础,没接触过的可以看下面链接 https://blog.csdn.net/sf9898/article/details/104946291 原理和实现 有一 ...

  6. 不带头结点的单链表操作

    不带头结点的单链表操作,包括插入.遍历.统计结点数等,要求写出数据结构算法思想及C语言实现函数 本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2021年06月22日发表于BLO ...

  7. 数据结构单链表实现班级考勤管理系统

    概述 运行环境 编译器:Intelij IDEA2020.3.2.x64 java环境:jdk11 基本原理,技术 首先,本程序采用的是图形界面输出,通过表格显示考勤及统计信息.为了可以长久保存考勤信 ...

  8. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

  9. 单链表操作——交换节点

    链表是最为常见,并且经常需要使用到的数据结构之一.对于单链表的基本操作,例如创建链表.插入.删除等都不是特别复杂,但是其实对于链表的操作实际上很多的操作还是有一定的难度,例如上次给出的单链表的逆转,以 ...

  10. 数据结构——单链表(小白入门第二天)

    一.什么是单链表? 定义:每个结点 除了存放数据元素外,还要存储指向下一个节点的指针: 优点:不要求大片连续空间,改变容量方便: 缺点:不可随机存取,要耗费一定空间存放指针 局限性:无法逆向检索 二. ...

最新文章

  1. 软件开发环境-集成机制
  2. Silverlight Curve Animation / 曲线动画
  3. 如何实现Punycode中文域名转码
  4. 面试被问 Go 的map[int64]int64 在 redis 会占多少空间...
  5. Visual Studio Code 使用指南
  6. SAP License:两种不太常见的移动类型
  7. 从医生看病和快餐店点餐理解Node.js的事件驱动
  8. Building beautiful User Interface in Android
  9. 卷积神经网络参数说明
  10. 如何自定义安装mysql_安装MySQL
  11. php正则去掉空格,PHP怎么实现正则去掉空格
  12. 怎么把视频压缩到最小的详解
  13. 独立显卡的计算机是指,电脑1T独显是什么意思?今天终于明白了
  14. JS验证邮箱 身份证 VISA 卡[转]
  15. ARM(ARM处理器) x64和x86
  16. mysql中没有utf8字符集_mysql之坑–UTF8字符集
  17. 简单的会员卡储值积分管理系统
  18. SAPUI5学习第八天-----(12)图标Icons和重用对话框Reuse Dialogs
  19. 工作中常用的设计模式 -- 责任链模式
  20. 如何用纯 CSS 创作闪闪发光的霓虹灯文字

热门文章

  1. python输出命令_Python中的命令输出解析
  2. 232接口针脚定义_VGA接口定义,详细图文资料
  3. phpstrpos不存在_深入理解PHP之strpos
  4. java 反射集合_Java反射的理解(六)-- 通过反射了解集合泛型的本质
  5. JetBrains:webstrom中代码模板设置
  6. Python:学习笔记
  7. linux 执行安装脚本,批量执行Linux安装程序和脚本
  8. pcl_view简单使用
  9. 论文笔记_S2D.15_2016-CVPR_ResNet_用于图像识别的深度残差学习网络
  10. 编译caffe错误查询