单链表的基本操作(一)

一、单链表的初始化:

1、生成新结点作为头结点,用头指针L指向头结点

2、头结点的指针域置空

Status InitList(LinkList &L)
{
     //构造一个空的单链表L
   L=new LNode ;//生成新结点作为头结点,用头指针L指向头结点
   L-next=NuLL;//头结点的指针域置空
   return ok;

}

二、取值:

1、用指针p指向首元结点,用j做计数器初值赋为1

2、从首元结点开始依次顺着链域next向下访问,只要指向当前结点的指针p不为空(NULL),并且没有到达序号为i的结点,则循环执行以下操作: a、p指向下一个结点   b、计数器j相应加1  c、退出循环时,如果指针p为空,或者计数器j大于i,说明指定的序号i值不合法(i大于表长n或i小于等于0),取值失败返回ERROR;否则取值成功,此时j=i时,p所指的结点就是要找的第i个结点,用参数e保存当前结点的数据域,返回ok。

Status GetElem(LinkList L,int i,ElemType &e)
{
     //在带头结点的单链表L中根据序号i获取元素的值,用e返回L中第i个数据元素的值
     p=L->next;
      j=1;    //初始化,p指向首元结点,计数器j初值为1
      while(p&&j<i)  //顺链表向后扫描,直到p为空或p指向第i个元素
      {
          p=p->next; //p指向下一个结点
          ++j;  //计数器j相应加1
      }
     if(!p || j>i) return  ERROR;//i值不合法i>n或i<=0
    e=p->data;   //取第i个结点的数据域
    return ok;
}

三、查找:
1、用指针p指向首元结点

2、从首元结点开始依次顺着链域next向下查找,只要指向当前结点的指针p不为空,并且p所指结点的数据域不等于给定值e,则循环执行以下操作,:p指向下一个结点

3、返回p,若查找成功,p此时即为结点的地址值,若查找失败,p的值即为NULL。

LNode *LocateElem(LinkList L,ElemType e)
{
    //在带头结点的单链表L中查找值为e的元素
    p=L->next;//初始化,p指向首元结点
   while(p && p->data !=e)//顺着链表向后扫描,直到p为空域或p所指结点的数据域等于e
  {
     p=p->next;//p指向下一个结点
     return p;//成功查找返回值为e的结点地址为p,查找失败p为NULL

}

}

四、插入

a    -------指针域,且指向x b------指针域
   x------指针域,且指向b

说明:为插入数据元素x,首先要生成一个数据域为x的结点,然后插入到单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向 结点x,而结点x中的指针域应指向节点b,从而实现3个元素a、b、x之间逻辑关系的变化。

算法步骤:

将值为e的新结点插入到表的第i个结点的位置上,即插入到结点a与b之间,具体插入过程如下:

1、查找结点a,并由指针p指向该结点

2、生成一个新的结点*s

3、将新的结点*s的数据域设置为e

4、将新的结点*s 的指针域指向结点b

5、将结点*p的指针域指向新结点*s

Status ListInsert(LinkList &L,int i,ElemType e)
{
    //在带头结点的单链表L中第i个位置插入值为e 的新结点
   p=L;
   j=0;
   while(p&& (j<i-1))
  {
      p=p->next;
      ++j;//查找第i-1个结点,p指向该结点
   }
   if(!p ||j>i-1)
    return ERROR;
    s=new LNode;//生成一个新的结点*s
    s->data=e;//将结点*s的数据域设置为e
   s->next=p->next;//将结点*s的指针域指向结点b
    p->next=s;//将结点*p的指针域指向结点*s
    return ok;
}

原文地址:https://www.cnblogs.com/1121518wo/p/11219934.html

时间: 2024-10-11 10:05:51

单链表的基本操作(一)的相关文章

单链表的基本操作实现

1.写这篇博文的原因 C语言有三个重要部分:流程控制.函数.指针. 对于指针,单单了解它的简单运用是远远不够的,最重要的是学习链表.所以这篇文章通过用C语言实现链表的一些基本操作和总结,希望对C语言的指针有更新的理解和认识. 2.单链表的定义 单链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的也可以是不连续的.为了建立起数据元素之间的关系,对于每个数据元素除了存放元素自身的信息外,还必须有包含指向该元素直接后继元素位置的信息,这两部分信息组成一个节点,即每个节点都有

《实验课---单链表的基本操作》

//线性表---链表的基本操作#include<stdio.h>#include<stdlib.h>#include<conio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define NULL 0typedef int Status; //函数结果状态代码typedef int ElemType; //数据元素类型//------线性表的单链表存储结构

用Java实现单链表的基本操作

笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode { private Node head; public ListNode(){ head=null; } //在链表前添加节点 public void addpre(int dvalue){ Node n=new Node(dvalue); if(head==null){ head=n; }els

单链表的基本操作(第一篇)

  学习数据结构的笔记 1.在线性表的链式存储中,头指针与头结点之间的根本区别以及头结点与开始结点的关系: 链表的头指针一般指向其第一个结点,他有标识链表的作用.头结点的作用在于统一相关操作,头结点的数据域一般没有意义,在某些情况下可以存放链表长   度.如果链表含有头结点,无论链表是   否为空,头指针均不为空.开始结点也就是链表中存储数据的第一个结点,它是头结点后边的第一个结点. 2.比较顺序表和链表各自的特点: (1)存储分配的方式:顺序表的存储空间是静态分配的.链表的存储空间是动态分配的

单链表的基本操作

直接上代码 #include<stdio.h> #include<stdlib.h> //结构定义 typedef struct node{ int data; //数据域 struct node *next; //指针域 }LinkList; //创建单链表 void CreateLinkList(LinkList *L){ L->next = NULL; } //尾插法 void Insert_Tail(LinkList *L,int x){ LinkList *p; p

D_S 单链表的基本操作

//  main.cpp #include <iostream> using namespace std; #include "Status.h" #include "LinkList.h" int main() { LinkList L; int n,i; ElemType e; InitList(L); cout<<"\nL="; ListTraverse(L); cout<<"\n请设置将向线性

C语言实现单链表的基本操作及其部分面试题

//单链表的基本数据类型及其结构 typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode *next; }LinkNode,*pLinkNode,*pLinkList; //单链表的初始化 void InitLinkList(pLinkList* pHead)//初始化 { assert(pHead); *pHead = NULL; } //当尾插,头插,插入时都需要建立一个新的结点,为方便建立

单链表的基本操作(建立.遍历.添加.删除)

有n个元素,我们把他们用链表表示,执行一些操作在某个位置添加一个数,或者删除某个位置的数: 输入合法的代码: #include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; struct node { int date; struct node *next; }; node *CreatList(node *head, int n); void TravList(node *hea

单链表及基本操作。(含练习)

1 ////////////////////////////////////////////// 2 //单链表的初始化,建立,插入,查找,删除. // 3 //(以及部分练习) // 4 //Author:Bread // 5 //Date: 2014.12.28 // 6 //Update 1th:2014.12.31 // 7 ////////////////////////////////////////////// 8 #include <stdio.h> 9 #include &l