线性表-链表(三)

一、单链表基本操作

(1)清空单链表

while(L->next){
   p=L->next;
   L->next=p->next;
   free(p);
}

分析:p 指向L的 next 域,L的 next域 在指向 p 的 next 域(p=L->next),其实就是L指向了 L 的 next 的 next 域.然后清空 p

不断循环,知道 L->next == NULL

(2)销毁单链表

while(L){
     p=L->next;
     free(L);
     L=p;
}

(3)单链表判断是否为空

if(L->next==NULL)
        return TRUE;
else
    return FALSE;

(4)求单链表的表长

int ListLength(LinkList L){
    p=L->next;
    i=0;
    while(p){
        i++;
        p=p->next;
    }
    return i;
}

(5)单链表中如何查找元素

 p=L->next;
 i=1;
 while(p && p->data!=e){
    p=p->next; i++;
 }
  if(p){
     return i;
  }
  else{
     return 0;
  }

分析:从第一个结点开始搜索,搜索成功,返回位序;否则,返回0

二、逆序建立单链表

分析:

  1. 建立一个带头结点的空单链表
  2. 输入数据元素ai,建立新结点p,并把p插入在头结点之后成为第一个结点。
  3. 重复执行第2步,直到完成单链表的建立。

    代码如下:

void CreateList_N(LinkList &L, int n) {
     // 逆序输入 n 个数据元素,建立带头结点的单链表
     L = (LinkList) malloc (sizeof (LNode));
     L->next = NULL;    

     for (i = 1; i <=n; i++) {
        p = (LinkList) malloc (sizeof (LNode));
        scanf(&p->data);    // 输入元素值
        p->next = L->next; L->next = p;  // 插入
     }

三、顺序建立单链表

分析:

  1. 建立一个带头结点的空单链表
  2. 输入数据元素ai,建立新结点,并把其插入在尾结点p之后成为最后一个结点
  3. 重复执行第2步,直到完成单链表的建立

    代码如下:

L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
p=L;
for(i=1;i<=n;i++){
    q=(LinkList)malloc(sizeof(LNode));
            scanf(&q->data);
            q->next=p->next;
            p->next=q;
            p=q;
}
时间: 2024-08-01 22:44:37

线性表-链表(三)的相关文章

数据结构线性表链表的C语言实现

                                                                                      数据结构线性表链表的C语言实现      说明:线性表是一种最简单的线性结构,也是最基本的一种线性结构,所以它不仅是学习中的重点,也是应用开发非常常用的一种数据结构.它可以分为顺序表和链表.它的主要操作是数据元素的插入,删除,以及排序等.接下来,本篇文章将对线性表链表的基本操作和运用进行详细的说明(包含在源代码的注释中),并给

线性表--链表(PHP实现)

上一篇文章写了线性表的基本概念以及用C语言实现链表,有兴趣的同学可以看看:线性表--链表(C语言实现). 现在,我们来看看用PHP来实现链表. 我们都知道,链表由一个个结点组成.在c语言中,我们用结构来定义一个结点,那么在PHP中我们用什么来定义结点? 当然是类. <?php //用面向对象的思想定义结点 class Node { public $value; public $next = null; } 先给出创建和遍历链表的代码,我们再说说链表的插入和删除操作,比起用顺序存储结构实现线性表的

数据结构(二)线性表——链表

通常情况下,链接可分为单链表.双向链表和循环链表三种常用类型. 一.单链表基本操作的实现 使用链式存储结构来实现的线性表称为链表.首元结点.头结点.头指针.空指针. 1.单链表的类型定义 typedef struct LNode//结点类型 { LElemType data;//数据域 struct LNode * next;//指针域 } LNode, * LinkList; 2.初始化操作InitLinkList(&L) Status InitLinkList(LinkList &L)

线性表链表实现

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define sc scanf 4 #define ElemType int 5 //线性表的链式表示和实现 6 7 typedef struct LNode{ 8 int data; 9 struct LNode *next; 10 }LNode,*LinkList; 11 //关于上面为啥是这样子的,看下面链接即可 12 //https://zhidao.baidu.com/questi

数据结构之 线性表--链表的逆置

数据结构实验之链表三:链表的逆置 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据. 输入 输入多个整数,以-1作为结束标志. 输出 输出逆置后的单链表数据. 示例输入 12 56 4 6 55 15 33 62 -1 示例输出 62 33 15 55 6 4 56 12 #include <iostream> #include <

数据结构——线性表——链表反转

链表反转有两种常见方式.下面从图中详细解释.其中带有部分核心代码,最后上完整代码. 迭代法 //首先定义三个变量    PNODE pre = NULL;    PNODE now = pHead->pNext;    PNODE next = NULL; next = now->pNext;//先保存下一个节点 now->pNext = pre;//当前节点的next指针指向前一个节点 pre = now;//前一个节点赋值为当前节点 now = next;//当前节点赋值为下一个节点

作业1 线性表 链表 的定义和实现

1 #include <iostream> 2 using namespace std; 3 4 5 template<class T> 6 struct SLNode 7 { 8 T data; 9 SLNode<T>* next; 10 SLNode(SLNode<T>*nextNode=NULL){next=nextNode;} 11 SLNode(const T&item,SLNode<T>*nextNode=NULL) 12 {

线性表-链表(一)

一,定义 什么是单链表呢? 单链表是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点都包含指向下一个节点的链接,也就是指针 单链表的特点是什么呢? - 数据元素在 逻辑关系上相邻 ,用指针表示 - 单链表 中访问数据元素时需从头开始,即顺序访问 - 比顺序表的优势在于,提供高效的重排数据项的能力 C代码: typedef struct LNode { ElemType data: struct LNode *next: }LNode, *LinkList: 其中 data 是数据域

线性表-链表(四)

一.循环链表 什么是循环链表? 最后一个结点的链接又指回头结点(第一个结点)的链表,整个链表形成一个环.与单链表相比,操作时判断最后一个结点的条件为:结点的链接是否为头结点 空表 条件:L->next==L 非空表 条件 p->next==L 二.双向链表 -什么是双向链表? 用两个链接表示元素间的逻辑关系,其一指向直接后继,其二指向直接前驱. 算法描述 typedef struct DuLNode{ Elem Type data; struct DuLNode *prior; struct