栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构之链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构之链表

链表

    为了避免插入和删除的线性开销,我们可以允许表不连续存储,由此产生了链表。
    链表由一系列不必在内存中相连的结构组成,每一个结构均含有元素表和指向包含该元素后继元素元的结构指针(Next指针)。
    最后一个单元的Next指针指向NULL,该值由C定义并且不能与指针相混淆。

指针变量就是包含存储另外某个数据的地址变量。 因此,如果某空间被声明为指向一个结构的指针,那么存储在其中的值就会被解释为主存中的一个位置,再在该位置可以找到一个结构。一个指针就是一个数。

    删除命令可以通过修改一个指针来实现。即将要删除元素的前一个元素的指针变量指向删除元素的下一个元素,最后释放被删除元素的空间。
    插入命令需要使用一次 malloc 调用从系统中得到一个新单元,并在此后执行两次指针调整。

程序设计

因为在实际中可能会出现的各种问题,为了避免这些问题,我们将留出一个标志节点,将之称之为表头。我们约定,表头在位置 0 处。
链表的类型声明:

#ifndef _List_H

struct Node;
typedef struct Node *PtrToNode;
typedef PtrTonode List;
typedef PtrTonode Position;

List MakeEmpty( List L );
int IsEmptype( List L);
int IsLast( Position P, List L);
Position Find( int X, List L);
void Delete( int X, List L);
Position FindPrevious( int X, List L); 
void Insert( int X, List L, Position P);
void DeleteList( List L);
Position Header( List L);
Position First( List L);
Position Advance( Position P);
int Retrieve( Position P);
int NULL = 0;

#endif
struct Node
{
    int Element;
    Position Next;
};

测试一个表是否为空:

int IsEmpty( List L)
{
    return L->Next == NULL;
};

测试当前的元素是否为表的最后一个元素:

int IsLast( Position P, List L )
{
    return P->Next == NULL;
};

该函数返回某个元素在表中的位置:

Position Find( int X, List L)
{
    Position P;
    P = L->Next;
    while(P != NULL && P->Element != X)
    
    
        P = P->Next;
    
    return P;
};

删除表 L 中的某个元素:

void Delete( int X, List L )
{
    Position P, TmpCell;
    P = FindPrevious( X, L );
    if( !IsLast( P, L ) )
    {
        TmpCell = P->Next;
        P->Next = TmpCell->Next;
        free( TmpCell );
    }
};

插入,将要插入的元素和表 L 和位置 P 一起传入:

Position FindPrevious( int X, List L )
{	
    Position P;
    P = L;
    while( P->Next != NULL && P->Next->Element != X )
        P = P->Next;

    return P;
};

void Insert( int X, List L, Position P)
{
    Position TmpCell;
    TmpCell = malloc( sizeof( struct Node ) );
    if( TmpCell == NULL )
        FatalError( "Out of space!!!" );
    TmpCell->Element = X;
    TmpCell->Next = P->Next;
    P->Next = TmpCell;
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号