关闭

单链表的定义建立插入删除查询

465人阅读 评论(0) 收藏 举报
单链表总结


1.单链表的节点定义:
typedef int DataType;// 节点数据类型
typedef struct Node{
DataType data;// 节点的数据域
struct Node *Next;// 节点的指针域
}LinkNode,*LinkList;
注意:
1> LinkNode*和LinkList是不同名字的同一个指针类型
2> LinkList类型的指针变量表示单链表的头指针
3> LinkNode*类型的指针变量p表示指向某一节点的指针
4> 生成节点的方法
   LinkNode *p=(LinkNode*)malloc(sizeof(LinkNode));
   
2.建立单链表
1.1> 头插法建立无节点的单链表
LinkList CreateListF(void){
// 返回单链表的头指针
int i;
LinkList head;// 头指针
LinkNode *s;// 工作指针
head=NULL;
for(i=0;i<10;i++){
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=i;
s->Next=head;
head=s;
}
return head;
}
1.2> 头插法建立有头节点的单链表
LinkList CreateListF1(void){
// 返回单链表的头指针
int i;
LinkList head=(LinkNode*)malloc(sizeof(LinkNode));
LinkNode *s;
head->Next=NULL;
for(i=0;i<10;i++){
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=i;
s->Next=head->Next;
head->Next=s;
}
return head;
}
2.1> 尾插法建立无头节点的单链表
LinkList CreateListR(void){
// 返回单链表的头指针
int i;
LinkList head=NULL;// 定义头指针
LinkNode *s,*p;
p=head;
for(i=0;i<10;i++){
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=i;
s->Next=NULL;
if(head==NULL)
head=s;
else {
p->Next=s;
}
p=s;
}
return head;
}
2.2> 尾插法建立有头节点的单链表
LinkList CreateListR1(void){
// 返回单链表的头指针
int i;
LinkList head=(LinkNode*)malloc(sizeof(LinkNode));// 定义头指针
LinkNode *s,*p;
p=head;
for(i=0;i<10;i++){
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=i;
s->Next=NULL;
p->Next=s;
p=s;
}
return head;
}
3.单链表的查找
3.1按序号查找
3.1.1带头节点的单链表的查找
typedef int status;
status searchListByNo(LinkList *L,int i){
int j=0;
LinkNode *p=L;
while(p->Next && j<i){
j++;
p=p->Next;
}
if(j==i)
return 1;
return 0;
}
3.1.2无头节点的单链表的查找
typedef int status;
status searchListByNo1(LinkList *L,int i){
int j=0;
LinkNode *p=L;
while(p && j<i){
j++;
p=p->Next;
}
if(p!=NULL)
return 1;
return 0;
}
3.2按值查找
3.2.1带头节点的单链表的查找
typedef int status;
status searchListByNo(LinkList *L,DataType x){
LinkNode *p=L;
while(p->Next && p->data!=x){
p=p->Next;
}
if(p->data==x)
return 1;
return 0;
}
3.2.2无头节点的单链表的查找
typedef int status;
status searchListByNo1(LinkList *L,DataType x){
LinkNode *p=L;
while(p && p->data!=x){
p=p->Next;
}
if(p!=NULL)
return 1;
return 0;
}


4.单链表的插入
4.1无头节点的单链表的插入
typedef int status;
status InsertList(LinkList  *L,DataType x){
//成功返回1,失败返回0
LinkNode *p=L,*q,*s;
if(p==NULL){
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->Next=NULL;
p=s;
}
else{
q=p;
while(p && p->data>x){
p=p->Next;
q=p;
}
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->Next=p;
q->Next=s;
}
return 1;
}
4.2有头节点的单链表的插入
typedef int status;
status InsertList1(LinkList  *L,DataType x){
//成功返回1,失败返回0
LinkNode *p=L,*q,*s;
q=p;
  while(p->Next && p->data>x){
  p=p->Next;
  q=p;
  }
  s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->Next=p;
q->Next=s;
return 1;
}
5.单链表的删除
5.1带头节点的单链表删除
typedef int status;
status DeleteList(LinkList *L,int i){
LinkNode *p,*q;
int j=0;
if(p==NULL){
return 0;
}
while(p->Next &&j<i){
  p=p->Next;
  j++;
  }
  if( p->Next;==NULL)
  return 0;
  q=p->Next;
  p->Next=p->Next->Next;
  free(q);
  return 1;
}
 
5.2无头节点的单链表的删除
typedef int status;
status DeleteList1(LinkList *L,int i){
LinkNode *p=L,*q;
int j=0;
q=p;
if(i==0){
q=p->Next;
p->data=q->data;
p->Next=q->Next;
free(q);
return 1;
}
while(p&&j<i){
j++;
q=p;
p=p->Next;
}
if(p==NULL)
return 0;
q->Next=p->Next;
free(p);
return 1;
}
注意:当删除第一个节点时,使用"狸猫换太子"的方法将第一个节点跟第二个节点替换,通过删除第二个节点的方法删除第一个节点
0
0
查看评论

单链表的初始化,建立,插入,查找,删除。

#include #include   typedef int ElemType;   //定义结点类型  typedef struct Node {     ElemType data;  ...
  • sinat_24436879
  • sinat_24436879
  • 2015-04-11 12:22
  • 2637

C++ 单链表创建、插入和删除

#include #include #include #include /** * cstdio是将stdio.h的内容用C++头文件的形式表示出来。 *stdio.h是C标准函数库中的头文件,即:standard buffered input&output。 *提供基本的文字的输...
  • tianzhaixing
  • tianzhaixing
  • 2014-04-01 10:23
  • 7355

C语言实现单链表的创建、插入、删除

节点数据结构: /* *定义链式存储线性表的结构 */ typedef struct LNode { int data; //数据域 struct LNode * next; //指向下一个节点的指针 } LNode,*LinkList;从尾部添加节点: /*...
  • qlzx_syzx
  • qlzx_syzx
  • 2017-11-29 18:04
  • 165

C++ 数据结构的单链表的建立,插入,删除操作

动态内存分配应用举例(链表)  我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。但若对数组元素进行插入和删除操作,则...
  • u012746763
  • u012746763
  • 2015-05-27 10:21
  • 2352

链表的基本操作(C语言版):建立,插入,删除,查找,输出

//1、链表的基本操作(不带头结点)//**的含义把握不准确,要认真研究练习 #include #include typedef struct list { int data; struct list *next; }LIST; void InitList(LIST **p) ...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2013-03-04 12:44
  • 5875

数据结构学习(三)——单链表的操作之查找、删除、插入。

创建链表的方法采用尾插法,且是改进版的尾插法,即添加了一个辅助头节点。 下面的代码是对插入、删除、查找的一个整体操作。其中查找分为按值和按位置查找。删除和插入都是按给定位置操作。 #include #include typedef struct list { char data; st...
  • abclixu123
  • abclixu123
  • 2012-11-22 22:56
  • 6625

数据结构与算法基础(二)之单链表的插入与删除操作

今天主要来讲一讲单链表的插入与删除操作的步骤和算法解释。这是单链表最基本的操作但是也是最重要的基础之一,有些地方还比较容易出错。下面我就结合源代码在上面加上注释来解释每一步的作用。 **一、单链表的插入操作** 1、图示(截图来自网易云课堂鱼C工作室《数据结构和算法》课程视频) 2、 ...
  • sinat_21312425
  • sinat_21312425
  • 2016-02-27 15:49
  • 3834

单链表的插入与删除算法

  • yychenxie21
  • yychenxie21
  • 2015-10-11 12:41
  • 2859

数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作

1、创建一个结构体:创建一个包含自身结构的结构体,该结构体包含一个数据域和指针域 1、链表初始化:在链表的初始化过程中要为一个结点用malloc函数分配一个空间,并且时next指针指向一个NULL,然后返回链表(注意判断空间时候申请成功) 3、初始化创建链表:创建链表要分为头插法和尾插法,该部...
  • banburenshseng
  • banburenshseng
  • 2017-02-08 16:29
  • 872

单链表的创建(头插法尾插法),插入,删除

#include #include #include using namespace std; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*Linked...
  • yinyu19950811
  • yinyu19950811
  • 2016-03-09 20:28
  • 1390
    个人资料
    • 访问:84776次
    • 积分:1658
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:80篇
    • 译文:2篇
    • 评论:2条
    最新评论