`
liu_android_1002
  • 浏览: 9258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

个人学习-数据结构-线性表,单链表C语言实现

阅读更多
线性表插入算法思路:
       如果插入位置不合理,抛出异常
       如果线性表长度大于等于数组长度,则抛出异常货动态增加容量
       从最后一个元素开始想前遍历到第i个位置,分别将他们都向后移动一个位置
       将要插元素填入位置i处
       表长加1


#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;

typedef struct
{
   ElemType data[MAXSIZE];
   int length;
}SqlList;

//获取线性表某个数据
Status GetElem( SqList L, int i,ElemType *e)
{
   if(L.length==0 || i<1 || i>L.length)
      return ERROR;
    *e = L.data[i-1];
    return OK;
}

//插入
Status ListInsert(SqList *L, int i, ElemType *e)
{
      int k;
      if(L->length>=MAXSIZE)
         return ERROR;
      if(i<1|| i>L->length+1)
        return  ERROR;
      if( i<= L->length)
      {
          for(k=L->length-1;k>=i-1;k--)
           {
               L->data[k+1] = L->data[k] ;
           }
      }
      L->data[i-1] = e;
      L->length++;
      return OK;
}

//线性单链表存储结构
typedef struct Node
{
    ElemType type;
    struct Node *next;
} Node;
typedef struct Node   *LinkList;//定义LinkList

单链表的读取算法思路:
1.声明一个结点p指向链表的第一个结点,初始化j从1开始
2.当j<i 时就遍历表,让p指针向后移动,不断指向下一节点,j累加1;
3.若到链表末尾p为空,则说明第i个元素不存在
4.否则查找成功,返回结点p的数据


//单链表的读取
Status GetElem(LinkList L,int i,ElemType *e)
{
     int i,j;
    LinkList p;
    p = L->next;
    j = 1;
    while(p && j<i)
    {
       p = p->next;
       ++j;
     }
    if( !p && j<-=i)
     return ERROR:
    *e = p->data;
    return OK;
}

单链表的插入算法设计思路
1.声明一节点p指向链表第一个结点,初始化j从1开始
2.当j<i时,就遍历链表,让p的指针向后移动,不断指向下一节点,j累加1;
3.若到链表末尾p为空,则说明第i个元素不存在;
4.否则查找成功,在系统中生成一个空节点s;
5.将数据元素e赋值给s->data;
6.单链表的标准插入语句 s->next = p->next;    p->next = s;
7.返回成功


//单链表的插入
Status ListInsert(LinkList *L , int i, ElemType  e)
{
    int j;
    LinkList p,s;
    p = *L;
    j = 1;
    while(p && j<i)
    {
      p = p->next;
      ++j;
    }
    if(!p || j<=i)
        return ERROR;    //第i个元素不存在
    s = (LinkList)malloc(sizeof(Node));  //生成新节点
    s->data = e;
    s->next = p->next;   //将p的后继节点赋值给s的后继
    p->next = s;            //将s赋值给p的后继
    return OK;
}

单链表的删除第i个结点的算法思路
1.声明一结点p指向链表第一个结点,初始化j从1开始;
2.当j<i时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;
3.若到链表末尾p为空,则说明第i个元素不存在;
4.否则查找成功,将欲删除的结点p->next赋值给q;
5.单链表的删除标准语句p->next = q->next;
6.将q结点中的数据赋值给e
7.释放q结点
8.返回成功


//单链表的删除
Status ListDelete(LinkList *L ,int i, ElemType *e)
{
   int j;
    LinkList p,q;
    p = *L;
    j = 1;
    while(p->next && j<i)
    {
      p = p->next;
      ++j;
    }
    if(!(p->next)|| j>=1)
        return ERROR;
    q = p->next;
    p->next = q->next;        //将q的后继赋值给p的后继
    *e = q->data;                //将q结点中的数据给e
    free(q)
    return OK;
}

单链表整表创建的算法思路
1.声明一结点p和计数器变量i;
2.初始化一空链表L;
3.让L的头结点的指针指向NULL,即建立一个带头结点的的单链表
4.循环:
    生成一新节点赋值给p;
    随机生成一数字赋给p的数据域p->data
    将p插入头结点与新节点之间


//单链表的整表创建
void CreateListHead(LinkList *L,int n)
{
   LinkList p;
   int i;
   srand(time(0));                //初始化随机种子
   for(i=0;i<n;i++)
   {
      *L = (LinkList)malloc(sizeof(Node));   
       p->data = rand()%100+1;
       p->next = (*L)->next;
       (*L)->next = p
    }
}

单链表的整表删除的算法设计思路
1.声明一结点p q;
2.将第一个结点赋值给p;
3.循环:
         将下一结点赋值给q;
         释放p;
        将q赋值给p.


//单链表的整表删除
Status ClearList(LinkList *L)
{
    LinkList p,q;
    p = (*L)->next;
    while(p)
    {
          q = p->next;
          free(p);
           p = q;
    }
    (*L)->next = NULL;
    return OK;
}

单链表结构与线性表存储结构的优缺点
存储分配方式
顺序存储结构用一段连续的存储单元依次存储线性表的数据元素
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素
时间性能
查找
   顺序存储结构O(1)
   单链表O(1)
插入和删除
  顺序存储结构需要平均移动表长的一半的元素,时间为O(n)
  单链表在线出某位置的指针后,插入和删除时间为O(1)
空间性能
  顺序存储结构需要预先分配好存储空间,分大了,浪费,分小了发生溢出
单链表不需要分配存储空间,只要有就可以分配,元素给叔也不受限制
分享到:
评论

相关推荐

    数据结构---线性表之单链表(C语言)

    单链表是数据结构中的一种基础类型,尤其在C语言编程中经常被使用。它是一种线性的、非连续的数据组织形式,每...通过C语言实现,我们可以直观地理解链表的工作原理,这对于进一步学习高级数据结构和算法具有重要意义。

    数据结构课件 线性表 单链表 栈和队列 串 数组和广义表 树和二叉树 C语言版

    本课件聚焦于数据结构的基础部分,特别是线性表、单链表、栈和队列、串、数组和广义表,以及树和二叉树,所有这些概念都是用C语言实现的。 1. **线性表**:线性表是最基本的数据结构,它是由n(n≥0)个相同类型...

    数据结构实战--线性表的单链表实现

    本实战项目聚焦于数据结构中的线性表,特别是通过单链表进行实现。线性表是一种基本的数据结构,由相同类型元素的有序序列组成,而单链表是其一种常见表示方式。 单链表是一种动态数据结构,每个元素(称为节点)...

    线性表的C语言实现

    线性表是计算机科学中一种...总结,线性表是数据结构的基础,C语言提供了灵活的方式来实现线性表,无论是数组还是链表,都有其适用的场景。理解和熟练运用线性表的实现与操作,是成为一名合格的C语言程序员的关键步骤。

    数据结构线性表的C语言代码

    适合学习数据结构的同学

    数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc

    数据结构C语言版-线性表的单链表存储结构表示和实现优质资料.doc 知识点摘要: 1. 数据结构的基本概念:数据结构是计算机科学中的一种基本概念,指的是数据的组织和存储方式。 2. 线性表的概念:线性表是一种基本...

    c语言数据结构线性表实验(包括顺序表和链表)

    在这个"C语言数据结构线性表实验"中,我们将深入探讨两种实现线性表的方法:顺序表和链表。 1. **顺序表**: - **定义**:顺序表是将数据元素存储在一块连续的内存区域中,每个元素都有一个固定的索引位置。 - **...

    数据结构C语言版-线性表的单链表存储结构表示和实现.doc

    "数据结构C语言版-线性表的单链表存储结构表示和实现" 本文档介绍了线性表的单链表存储结构表示和实现,使用C语言编写,提供了多种操作函数,包括初始化、销毁、清空、判断空表、获取元素、获取元素位序等。 数据...

    线性表的合并/c语言

    此程序采用单链表作为线性表的实现方式,它是一种动态数据结构,允许在运行时添加或删除元素。 首先,让我们了解链表的基本概念。链表不同于数组,它的元素不是在内存中连续存储的。每个链表节点包含两部分:数据域...

    数据结构---线性表之双链表(C语言)

    理解双链表的原理和操作对于学习数据结构和算法至关重要,尤其是在处理需要动态调整数据结构的问题时。双链表因其灵活性和高效性,常被用于各种数据结构,如队列、栈和哈希表等。在实际编程中,熟练掌握双链表的创建...

    数据结构(第4版)习题及实验参考答案-数据结构复习资料完整版(c语言版).docx

    "数据结构(第4版)习题及实验参考答案-数据结构复习资料完整版(c语言版)" 本文档是关于数据结构的习题及实验参考答案,涵盖了数据结构的基础知识、逻辑结构、物理结构、算法、时间复杂度等方面。 数据结构基础 ...

    线性表(c语言实现).zip

    总的来说,这个压缩包提供了C语言实现线性表的不同角度,有助于深入理解数据结构和算法,同时也为实际编程提供了实例参考。无论是学习数据结构的初学者,还是需要优化已有代码的开发者,都能从中获益。

    线性表的链式实现-----单链表

    总的来说,"线性表的链式实现-----单链表"这个主题涵盖了数据结构中的基础概念和C语言的指针操作,是学习数据结构和算法的重要部分。通过`LinkList.h`和`LinkList.c`的代码,可以深入理解单链表的创建、操作和销毁...

    数据结构实验报告-2-2-线性表(链表实现).docx

    在本实验中,我们将重点讨论线性表的链表实现,这是数据结构领域的一个重要概念。 链表是一种动态数据结构,它不像数组那样需要预先分配连续的内存空间。在链表中,每个元素称为节点,每个节点包含两个部分:数据域...

    数据结构-上机实验一-线性表顺序存储运算的算法实现.pdf

    本实验主要涉及的是数据结构中的线性表,特别是顺序存储结构的实现,以及在C语言环境下使用Visual C++进行编程。线性表是数据结构的基础,由相同类型元素构成的有限序列,其顺序存储结构是通过数组来实现的。下面将...

    数据结构实验报告-2-2-线性表(链表实现).pdf

    在这个实验报告中,我们关注的是线性表的链表实现,这是一种非常重要的数据结构,广泛应用于各种计算机算法和系统设计中。 链表与数组不同,它不连续存储元素,而是通过每个节点的指针链接相邻的元素。链表包含两种...

    数据结构实验报告 线性表 串 队列 栈.doc

    本实验报告的主题围绕线性表、串、队列和栈这四种基本的数据结构展开,旨在通过实践加深对这些概念的理解。线性表是一种线性的数据结构,其中元素按特定顺序排列,每个元素只有一个前驱和一个后继,除了第一个和最后...

    数据结构 C语言版 线性表的链式存储

    这个“数据结构 C语言版 线性表的链式存储”主题深入探讨了如何用C语言实现链式存储线性表,包括结构体定义、基本操作的实现以及相关的算法设计。通过学习和实践,读者可以掌握链表这一核心数据结构的原理和编程...

    数据结构 C语言 线性表 实验报告加代码

    在这个实验报告中,我们将专注于线性表这一基础数据结构,它是计算机科学中最常用的数据结构之一,特别是在C语言编程中。线性表可以采用顺序存储或链式存储,这里我们主要探讨的是链式存储,即单链表。 实验的主要...

Global site tag (gtag.js) - Google Analytics