【数据结构与算法分析】 第三章 表

【数据结构与算法分析】 第三章 表

1.抽象数据类型

抽象数据类型(ADT)是一些操作的集合。

对表、集合、图和他们的操作一起可以看作是抽象数据类型,就像整数、实数和布尔量是数据类型一样。对于集合ADT,可以有并、交、测定大小及取余等操作。或者只要两种操作:并和查找,这两种操作又在该集合上定义了一种不同的ADT

2.表ADT

在表ADT上运行的操作的集合:

PrintList和MakeEmpty,打印和清空表

Find返回关键字首次出现的位置

Insert和Delete从表的某个位置插入和删除某个关键字

FindKth返回某个位置上(作为参数而被指定)的元素

2.1链表

为了避免插入和删除的线性开销,需要允许表可以不连续存储,否则表的部分或全部需要整体移动,因此产生了链表

链表由一系列不必再内存中相连的结构组成,每一个结构均含有表元素和指向包含该元素后继元的结构的指针,即next指针,最后一个单元的next指针指向NULL

删除链表中元素:

扫描二维码关注公众号,回复: 2763403 查看本文章

向链表插入元素:

2.2程序设计

实际程序设计中,常需要引入表头,表头在位置0处,方便程序编写:

链表的类型声明:

#ifndef _List_H

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

List MakeEmpty(List L);
int IsEmpty(List L);
int IsLast(Position P,List L);
Position Find(ElementType X,List L);
void Delete(ElementType X,List L);
Position FindPrevious(ElementType X,List L);
void Insert(ElementType X,List L,Position P);
#endif

struct Node
{
    ElementType Element;
    Position Next;
}

 测试一个链表是否是空表的函数:

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

Find函数:

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

链表删除元素:

void Delete(ElementType X,List L)
{
    Position P,Temp;
    P=FindPrevious(X,L);
    if(!=IsLast(P,L))
    {
        Temp=P->Next;
        P->Next = Temp->Next;//修改链表,指向下一个位置
        free(Temp);//释放内存
    }
}
Position FindPrevious(ElementType X,List L)//找出X元素的前一个位置
{
    Position P;
    P = L;
    while(P->Next != NULL&&P->Next->Element != X)
        P=P->Next;
    return p;
}

链表插入元素:

void Insert(ElementType X,List L,Position P)//向后插入
{
    Position Temp;
    Temp = malloc(sizeof(struct Node));
    if(Temp==NULL)
        FatalError("out of space");
    Temp->Element = X;
    Temp->Next = P->Next;
    P->Next = Temp;
}

 删除表:

void DeleteList(List L)
{
    Position P,Temp;
    P=L->Next;
    L->Next = NULL;
    while(P!=NULL)
    {
        Temp = P->Next;
        free(P);
        P=Temp;
    }
}

 

猜你喜欢

转载自blog.csdn.net/zhangxiafll/article/details/81669970