线性表之链表(代码片段)

author author     2023-03-09     682

关键词:

单链表也是一种链式存取的线性表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,以next指针指向下一个节点而链接起来,相比于顺序表,链表有着快速增加,删除节点的优势,其节点的随机访问效率较低。

头文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:LineTable.h 
 * 
 *Function:单链表相关数据定义和函数声明 
 * 
 *Author:Abel Lee 
 * 
 *CreateOn:2011-5-3 
 * 
 *Log:2011-5-3 由Abel Lee创建 
 *****************************************************************************************************/ 

#ifndef SINGLE_LIST_H 
#define SINGLE_LIST_H 

#include "global.h" 

typedef struct LNode 
 
    ElemType data; 
    struct LNode *next; 
LNode,*LinkList; 

int CreateSingleList(LinkList *L,int n); 
void  PrintSingleList(LinkList L); 
int InsertSingleList(LinkList *L,int i,ElemType e); 
int DeleteSingleList(LinkList *L,int i,ElemType *e); 
int GetSingleListLength(LinkList L); 
void DestroySingleList(LinkList *L); 

#endif

源文件:

/***************************************************************************************************** 
 *Copyright:Yue Workstation 
 * 
 *FileName:SingleList.c 
 * 
 *Function:单链表基本操作 
 * 
 *Author:Abel Lee 
 * 
 *CreateOn:2011-5-3 
 * 
 *Log:2011-5-3 由Abel Lee创建 
 *****************************************************************************************************/ 

#include "../inc/SingleList.h" 

/**************************************************************************************************** 
 *Function Name:CreateSingleList 
 * 
 *Function:创建一个单链表 
 * 
 *Parameter:     L:单链表表头, 
 *                 n:单链表长度 
 * 
 *Return Value:成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
int CreateSingleList(LinkList *L,int n) 
 
    int i = 0; 
    LinkList p1,p2; 

    *L = (LinkList)malloc(sizeof(LNode)); 
    if(*L == NULL) 
     
        perror("malooc error
"); 
        return -1; 
     
    (*L)->data = 0; 
    (*L)->next = NULL; 
    p1 = *L; 
    p2 = *L; 

    for(i=1; i<=n; i++) 
     
        p1 = (LinkList)malloc(sizeof(LNode)); 
        if(p1 == NULL) 
         
            perror("malooc error
"); 
            return -1; 
         
        p1->data = i; 
        p2->next = p1; 
        p2 = p1; 
     

    p2->next = NULL; 
    (*L)->data = n; 

    return 0; 
 

/**************************************************************************************************** 
 *Function Name:PrintSingleList 
 * 
 *Function:打印单链表表中的元素 
 * 
 *Parameter:     L:单链表表头 
 * 
 *Return Value:无 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
void  PrintSingleList(LinkList L) 
 
    L = L->next; 
    while(L) 
     
        printf("%d---",L->data); 
        L = L->next; 
     
    putchar(‘
‘); 

    return ; 
 

/**************************************************************************************************** 
 *Function Name:InsertSingleList 
 * 
 *Function:在i位置插入一个元素e 
 * 
 *Parameter:     L:单链表表头, 
 *               i:元素位置 
 *               e:要插入的元素 
 * 
 *Return Value:成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
int InsertSingleList(LinkList *L,int i,ElemType e) 
 
    LinkList p1 = (*L)->next; 
    LinkList p2 = (*L)->next; 
    int j = 1; 

    while(p1 && j<i-1) 
     
        p1 = p1->next; 
        ++j; 
     

    if(!p1 || j>i-1) 
     
        perror("Insert position error,the parameter i is error!
"); 
        return -1; 
     

    p2 = (LinkList)malloc(sizeof(LNode)); 
    p2->data = e; 
    p2->next = p1->next; 
    p1->next = p2; 
    (*L)->data += 1; 

    return 0; 
 

/**************************************************************************************************** 
 *Function Name:DeleteSingleList 
 * 
 *Function:在制定位置删除单链表中的元素 
 * 
 *Parameter:     L:单链表表头, 
 *               i:元素位置 
 *               e:要插入的元素 
 * 
 *Return Value: 成功返回0,失败返回-1 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
int DeleteSingleList(LinkList *L,int i,ElemType *e) 
 
    LinkList p1 = (*L)->next; 
    LinkList p2 = NULL; 
    int j = 1; 

    while(p1 && j<i-1) 
     
        p1 = p1->next; 
        ++j; 
     

    if(!p1 || j>=i) 
     
        perror("Delete position error,the parameter i is error!
"); 
        return -1; 
     

    p2 = p1->next; 
    p1->next = p2->next; 
    *e = p2->data; 
    free(p2); 
    (*L)->data -= 1; 

    return 0; 
 

/**************************************************************************************************** 
 *Function Name:GetSingleListLength 
 * 
 *Function:获取单链表长度 
 * 
 *Parameter:     L:单链表表头 
 * 
 *Return Value:单链表长度 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
int GetSingleListLength(LinkList L) 
 
    if(L == NULL) 
     
        return -1; 
     

    return L->data; 
 

/**************************************************************************************************** 
 *Function Name:DestroySingleList 
 * 
 *Function:销毁一个单链表 
 * 
 *Parameter:     L:单链表表头 
 * 
 *Return Value:无 
 * 
 *Author:Abel Lee 
 * 
 *Log:2011-5-24 
 ***************************************************************************************************/ 
void DestroySingleList(LinkList *L) 
 
    LinkList p1 = *L; 
    LinkList p2 = *L; 

    while(p1 != NULL) 
     

        p2 = p1; 
        p1 = p1->next; 
        free(p2); 
     
    *L = NULL; 

    return; 

线性表之链表(代码片段)

单链表也是一种链式存取的线性表,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,以next指针指向下一个节点而链接起来,相比于顺序表,链表有着快速增加,删除节点的优势,其节点... 查看详情

03线性表之链表(代码片段)

肚子饿了就要吃  ~  嗝 ———路飞 1.本章重点链表表示和实现(单链表+双链表)链表的常见OJ题顺序表和链表的区别和联系2.为什么需要链表引子:顺序表的问题及思考(1)动态顺序表特点:插入数据,... 查看详情

c语言严蔚敏数据结构线性表之链表实现(代码片段)

...算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现。  首先,数据结构包括1、数据的操作2、逻辑结构3、存储结构(数据结构三要素。  直接上代码,现阶段代码实现功... 查看详情

数据结构学习笔记二线性表之链表篇(双向链表)(代码片段)

链表根据带头不带头、单向或双向、循环非循环三个方面可组成成八种类型。这八种类型中仅有两种是我们常用的。第一种是单向不带头非循环链表,也就是单链表。单链表因为结构简单,但是实际操作比较复杂,所... 查看详情

线性表之链表(代码片段)

线性表的链式存储表示的特点:是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了... 查看详情

线性表之链表c语言

线性表之链表【C语言】2.5线性表的链式表示和实现4、头指针、头结点和首元结点:讨论1:如何表示空表?讨论2:在链表中设置头结点有什么好处?讨论3:头结点的数据域内装的是什么?■链表(链式存储结构)的特点2.5.1单链表的定义和... 查看详情

线性表之链表源码

//链表#include<iostream>#include<algorithm>usingnamespacestd;typedefstructLNode{ intdata; structLNode*next;}LNode,*LinkList;intInitList_L(LinkList&L){ L=newLNode; L->next=NULL; return 查看详情

数据结构线性表之实现单循环链表(代码片段)

数据结构线性表之实现单循环链表数据结构线性表之实现单循环链表相关文章单循环链表单循环链表定义数据结构线性表之实现单循环链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实... 查看详情

数据结构(线性表之单链表)(代码片段)

文章目录🥇为何要使用链表🥇单链表是什么单链表的数据存储方式🥇单链表之创建链表🥇单链表之打印链表🥇单链表之计算链表长度🥇单链表之增删查改单链表之头插法单链表之尾插法单链表之把一个... 查看详情

数据结构与算法-线性表之双向链表(代码片段)

...3561803.htmlhttps://blog.csdn.net/howlaa/article/details/385132351、概述线性表是一种线性结构,由数组、单项链表和双向链表组成,这里讲讨论双向链表的理论知识和实现代码。双向链表和单项链表类似,双向链表由两个指针作为指针域,分... 查看详情

数据结构线性表之实现单链表(代码片段)

数据结构线性表之实现单链表数据结构线性表之实现单链表相关文章单链表定义单链表相关操作数据结构线性表之实现单链表相关文章数据结构线性表之概念(一)数据结构线性表之抽象基类(二)数据结构线性表之实现顺序表(三)数... 查看详情

链表的初始化c语言(代码片段)

/*Byyangbocsu线性表之链表2021.07.20*/#include<stdio.h>#include<stdlib.h>/*预定义常量和类型*//*函数结果状态码*/#defineTRUE 查看详情

数据结构与算法-线性表之静态链表(代码片段)

前言:前面介绍的线性表的顺序存储结构和链式存储结构中,都有对对象地引用或指向,也就是编程语言中有引用或者指针,那么在没有引用或指针的语言中,该怎么实现这个的数据结构呢?一、简介  定义:用数组代替指针... 查看详情

数据结构学习总结线性表之单链表(代码片段)

   一,回忆链表  链表,别名链式存储结构或单链表,用于存储逻辑关系为"一对一"的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。&nbs... 查看详情

算法习题---线性表之单链表的查找(代码片段)

一:问题已知一个带头结点的单链表,结点结构为(data,link)假设该链表只给出了头指针list,在不改变链表的前提下,设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数),若查找成功,算法输出该... 查看详情

数据结构之链表及实现(代码片段)

线性表的链式表示和实现线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻。正由于这种特点,在做插入和删除操作时,需移动大量元素。链式存储:不要求逻辑上相邻的元素在物理位置上也相邻,... 查看详情

数据结构与算法-线性表之循环链表(代码片段)

前言:前面几篇介绍了线性表的顺序和链式存储结构,其中链式存储结构为单向链表(即一个方向的有限长度、不循环的链表),对于单链表,由于每个节点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说... 查看详情

线性链表之顺序表

/* @content线性链表之顺序表 @date2017-3-211:06 @authorJohnnyZen *//*线性表  顺序表  链式表[带头指针/不带头指针]   单链表  循环单链表 双向链表循环双链表   ADT& 查看详情