数据结构之链式表

数据结构之链式表

理解

  • 以链式的形式构造顺序线性表
  • 采取指针将不同地址的结点相连接,地址没有联系
  • 查找、删除、插入都需要从头结点向后循环,时间复杂度都为O(n)
  • 不存在过度占用空间的情况,需要一个申请一个,不用时,返还。

代码(差一个链式表初始化)

#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode{
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

#define ERROR NULL /*顺序表用数值-1表示错误,链式表用NULL*/

/* 查找 */
Position Find( List L, ElementType X )
{
    Position p = L; /*链式表L的头结点*/

    while ( p && p->Data!=X )/*指针p不为NULL且p结点存储元素不为X*/
        p = p->Next; 

    return p;
} 

/* 插入 */
bool Insert( List L, ElementType X, Position P )
{
    Position tmp, pre;/*P,tep,pre都为指针类型*/

    for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ;  /*循环已结束,找到P位置的前一个结点*/
    if ( pre==NULL ){
        printf("插入位置参数错误\n");
        return false;
    }
    else {
        tmp = (Position)malloc(sizeof(struct LNode)); /*申请新结点tmp*/
        tmp->Data = X;
        tmp->Next = pre->Next; /*等效于tmp->Next = P*/
        pre->Next = tmp;
        return true;
    }
}

/* 删除 */
bool Delete( List L, Position P )
{
    Position pre;

    for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ;
    if ( pre==NULL ){
        printf("删除位置参数错误\n");
        return false;
    }
    else {
        pre->Next = P->Next;/*将pre的下一结点连接到P的下一结点,即跳过P结点*/
        free(P);/*将P结点空间返还*/
        return true;
    }
}

原文地址:https://www.cnblogs.com/chenshaowei/p/8901887.html

时间: 2024-11-03 16:42:35

数据结构之链式表的相关文章

数据结构 链式表

数据结构课作业之链式表. 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 6 struct Node 7 { 8 char name[30]; 9 char telp[30]; 10 Node * next; 11 }; 12 13 class Stulist 14 { 15 public : 16 Stulist (); 17 ~Stulis

javascript实现数据结构:广义表

原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an) LS是广义表的名称,n是它的长度,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表.习惯上,用大写字母表示广义表的名称,小写字母表示原子.当广义表LS非空时,称第一个元素a1为LS的表头,称其余元素组成的表(a2, a3, ..., an)是LS的表尾. 下面列举一些广义表的例

软考之路--数据结构之线性表

数据就是数值,也就是我们通过观察.实验或计算得出的结果.数据有很多种,最简单的就是数字.数据也可以是文字.图像.声音等.数据可以用于科学研究.设计.查证等.结构,组成整体的各部分的搭配和安排,两者完美结合在一起,我们这样需要重新认识她,对她重新审视与定义:数据结构是程序设计的重要理论和技术基础,她所讨论的内容和技术,对从事软件项目的开发有重要作用,通过学习数据结构,我们学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所设计的数据悬着适当的逻辑结构.存储结构及其相应的操作方法,为提高应

[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列

python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构时,这些高级的数据结构可能给我们以迷惑. 比如,使用list实现queue的时候,入队操作append()时间复杂度可以认为是O(1),但是,出队操作pop(0)的时间复杂度就是O(n). 如果是想利用python学学数据结构的话,我觉得还是自己实现一遍基本的数据结构为好. 1.链表 在这里,我想使

Java数据结构之线性表

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几张,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 Java数据结构之线性结构 说到线性结构的话,我们可以根据其实现方式分为三类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表 1.顺序结构的线性表    

数据结构之线性表(顺序存储结构)

小学生放学都是要按顺序排队的,一个接一个,每个小学生的前后位置是固定的,这样便于迅速清点. 其实这就是一个线性表,从这件事里我们就可以找到很多关于线性表的特性,如 1.线性表是一个序列,它是有顺序的(排队) 2.第一个元素无前驱,最后一个无后继,其他每个元素都有一个前驱和后继(一个接一个) 3.元素是有限的(小学生的个数是有限的) 4.数据类型都相同(都是小学生在排队) 说明白线性表示什么,下面我们直接看线性表的实现 线性表的实现分顺序存储结构和链式存储结构 顺序存储结构: #define LI

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表有两种存储结构: ①顺序存储结构,即存储单元在一段连续的地址上存储,常见的数组就是顺序存储结构的线性表: ②链式存储结构,即存储单元在不连续的地址上存储.因为其不连续性,除了要存数据元素信息(数据域)外,还要存储它后继元素(结点)的地址(指针域,链).学习链式结构最好将结点结构牢记于心,如下图: 链表的每个结点只含有一个指

4-3 求链式表的表长 (10分)

本题要求实现一个函数,求链式表的表长. 函数接口定义: int Length( List L ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表,函数Length要返回链式表的长度. 裁判测试程序样例: #include <stdio.h> #include <stdl

css---样式表分类,选择器

css(Cascading Style Sheets,层叠式样式表),作用是美化HTML网页. 一:样式表的分类: 1,内联式样式表 和html联合显示,控制精确,样式优先级最高,但是代码重用性差. style="样式" 例如:<div style="height:200px;"></div> 2,内嵌式样i式表 作为一个独立区域内嵌在网页里,必须写在head标签里,先第二,重用性一般. 3,外部式样式表 写在一个以css结尾的文件中,通过引