表ADT

作者: HanMeng | 来源:发表于2018-02-02 21:28 被阅读0次

链表

#include<stdio.h>

#include<stdlib.h>

//链表的类型声明

struct Node;

typedef struct Node *PtrToNode;

typedef PtrToNode List;

typedef PtrToNode Position;

struct Node{

    int Element;

    Position Next;

};

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

int IsEmpty(List L){

    return L->Next == NULL;

}

//测试当前位置是否是链表的末尾的函数

int IsLast(Position P,List L){

    return P->Next == NULL;

}

//Find例程

Position Find(int X,List L){

    Position P;

    P = L->Next;

    while (P != NULL && P->Element != X) {

        P = P->Next;

    }

    return P;

}

//FindPrevious--为与Delete一起使用的Find例程,FindPrevious函数找出含有X的表元的前驱元P。

Position FindPrevious(int X,List L){

    Position P;

    P = L;

    while (P->Next != NULL && P->Next->Element != X) {

        P = P->Next;

    }

    return P;

}

//链表的删除例程,删除表L中的某个元素X。

void Delete(int X,List L){

    Position P,Tmpcell;

    P = FindPrevious(X, L);

    if(!IsLast(P, L)){

        Tmpcell = P->Next;

        P->Next = Tmpcell->Next;

    }

}

//链表的插入例程,将一个元素插入到由P所指示的位置之后

void Insert(int X,List L,Position P){

    Position TmpCell;

    TmpCell = malloc(sizeof(struct Node));

    if(TmpCell == NULL){

        printf("Out of space!!!\n");

    }

    TmpCell->Element = X;

    TmpCell->Next = P->Next;

    P->Next = TmpCell;

}

//删除表的正确方法

void DeleteList(List L){

    Position P,Tmp;

    P = L->Next;

    L->Next = NULL;

    while (P != NULL) {

        Tmp = P->Next;

        P = Tmp;

    }

}

int main(){

    return 0;

}

链表的游标实现

#include<stdio.h>

#include<stdlib.h>

#define SpaceSize 10

typedef int PtrToNode;

typedef PtrToNode List;

typedef PtrToNode Position;

struct Node{

    int Element;

    Position Next;

};

struct Node CursorSpace[SpaceSize];

//例程:CursorAlloc和CursorFree

static Position CursorAlloc(){

    Position P;

    P= CursorSpace[0].Next;

    return P;

}

static void CursorFree(Position P){

    CursorSpace[P].Next = CursorSpace[0].Next;

    CursorSpace[0].Next = P;

}

//测试一个链表是否为空的函数--游标实现

int IsEmpty(List L){

    return CursorSpace[L].Next == 0;

}

//测试P是否是链表的末尾的函数--游标实现

int IsLast(Position P,List L){

    return CursorSpace[P].Next == 0;

}

//例程Find--游标实现

Position Find(int X,List L){

    Position P;

    P = CursorSpace[L].Next;

    while (P && CursorSpace[P].Element != X) {

        P = CursorSpace[P].Next;

    }

    return P;

}

//对链表进行删除操作的例程Delete--游标实现

void Delete(int X,List L){

    Position P,Tmpcell;

    P = FindPrevious(X,L);

    if(!IsLast(P, L)){

        Tmpcell = CursorSpace[P].Next;

        CursorSpace[P].Next = CursorSpace[Tmpcell].Next;

        CursorFree(Tmpcell);

    }

}

//对链表进行插入操作的例程Insert--游标实现

void Insert(int X,List L,Position P){

    Position TmpCell;

    TmpCell = CursorAlloc();

    if(TmpCell == 0)

        printf("Out of space!!!");

    CursorSpace[TmpCell].Element = X;

    CursorSpace[TmpCell].Next = CursorSpace[P].Next;

    CursorSpace[P].Next = TmpCell;

}

int main(){

    return 0;

}

相关文章

  • 表ADT

    链表 #include #include //链表的类型声明struct Node;typedef struct ...

  • ADT-表

    抽象数据类型abstract data type,ADT:带有一组操作的一些对象的集合 表ADT 数组 查询:花费...

  • 表、栈和队列

    数据结构与算法分析-c语言描述抽象数据类型(ADT)1、表ADT可以用由数组实现。链表实现。双链表。循环链表。 -...

  • 线性表(二)、线性表的抽象数据类型

    线性表的抽象数据类型定义 ADT 线性表(List) Data 线性表的数据对象集合为{a1,a2,…,an...

  • 一句话解释:面向对象

    一种抽象方式: ADT+OP(ADT) new ADT+ new OP(new ADT) …………

  • arrayList

    线性表 抽象数据类型ADT LinearList{实例 操作 } 按照定义给出的LinearList class定...

  • ADTStack

    ADT 栈(stack){Data同线性表。元素具有相同的类型,相邻元素具有前驱和后堆关系。OperationIn...

  • ADT

    来上海参加ADT小区长的培训,一整天在会场参加会议,从早上9点到晚上9点。 直到现在聚完餐,打车回酒店的路上,一整...

  • 线性表

    抽象数据类型的标准格式:ADT(Abstract Date Type) 线性表抽象数据类型格式 上面说到的Oper...

  • Android开发环境搭建(一)

    一、使用Eclipse+ADT工具 需要安装JDK、Eclipse、ADT(Android Develope...

网友评论

      本文标题:表ADT

      本文链接:https://www.haomeiwen.com/subject/xmfyzxtx.html