list.h文件

         /*链表的类型声明*/

         typedef int ElementType;

 /* START: fig3_6.txt */
#ifndef _List_H
#define _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 );
void DeleteList( List L );
Position Header( List L );
Position First( List L );
Position Advance( Position P );
ElementType Retrieve( Position P ); #endif /* _List_H */
/* END */

list.c文件

         #include "list.h"
#include <stdlib.h>
#include "fatal.h" /* Place in the interface file */
struct Node
{
ElementType Element;
Position Next;
}; /*创建空链表*/
List
MakeEmpty( List L )
{
if( L != NULL )
DeleteList( L );
L = malloc( sizeof( struct Node ) );
if( L == NULL )
FatalError( "Out of memory!" );
L->Next = NULL;
return L;
} /* START: fig3_8.txt */
/* Return true if L is empty */ /*判断链表是否为空*/
int
IsEmpty( List L )
{
return L->Next == NULL;
}
/* END */ /* START: fig3_9.txt */
/* Return true if P is the last position in list L */
/* Parameter L is unused in this implementation */ /*判断是否为链表的最后元素*/
int IsLast( Position P, List L )
{
return P->Next == NULL;
}
/* END */ /* START: fig3_10.txt */
/* Return Position of X in L; NULL if not found */ /*找某元素的位置*/
Position
Find( ElementType X, List L )
{
Position P; /**/ P = L->Next;
/**/ while( P != NULL && P->Element != X )
/**/ P = P->Next; /**/ return P;
}
/* END */ /* START: fig3_11.txt */
/* Delete from a list */
/* Cell pointed to by P->Next is wiped out */
/* Assume that the position is legal */
/* Assume use of a header node */ /*删除链表某个元素*/
void
Delete( ElementType X, List L )
{
Position P, TmpCell; P = FindPrevious( X, L ); if( !IsLast( P, L ) ) /* Assumption of header use */
{ /* X is found; delete it */
TmpCell = P->Next;
P->Next = TmpCell->Next; /* Bypass deleted cell */
free( TmpCell );
}
}
/* END */ /* START: fig3_12.txt */
/* If X is not found, then Next field of returned value is NULL */
/* Assumes a header */ /*找某个元素的前一个元素*/
Position
FindPrevious( ElementType X, List L )
{
Position P; /**/ P = L;
/**/ while( P->Next != NULL && P->Next->Element != X )
/**/ P = P->Next; /**/ return P;
}
/* END */ /* START: fig3_13.txt */
/* Insert (after legal position P) */
/* Header implementation assumed */
/* Parameter L is unused in this implementation */ /*在某个位置后面插入一个元素*/
void
Insert( ElementType 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;
}
/* END */ #if 0
/* START: fig3_14.txt */
/* Incorrect DeleteList algorithm */ void
DeleteList( List L )
{
Position P; /**/ P = L->Next; /* Header assumed */
/**/ L->Next = NULL;
/**/ while( P != NULL )
{
/**/ free( P );
/**/ P = P->Next;
}
}
/* END */
#endif /* START: fig3_15.txt */
/* Correct DeleteList algorithm */ /*删除链表*/
void
DeleteList( List L )
{
Position P, Tmp; /**/ P = L->Next; /* Header assumed */
/**/ L->Next = NULL;
/**/ while( P != NULL )
{
/**/ Tmp = P->Next;
/**/ free( P );
/**/ P = Tmp;
}
}
/* END */ /*返回头结点*/
Position
Header( List L )
{
return L;
} /*返回第一个节点*/
Position
First( List L )
{
return L->Next;
}
/*返回某节点的下一个节点*/
Position
Advance( Position P )
{
return P->Next;
} /*返回某节点的值*/
ElementType
Retrieve( Position P )
{
return P->Element;
}

链表ADT的实现的更多相关文章

  1. 数据结构:DHUOJ 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果)

    单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867 ...

  2. 单链表ADT

    本博客第一篇学术性博客,所以还是写点什么东西: 首先这篇博客以及以后的博客中的代码尽量百分之90是自己写过的: 可能有部分图片和代码是我认为别人更好的故摘抄下来, 本人三观正确,所以一定会表明来源: ...

  3. 数据结构---链表ADT C++实现

    最近在学习数据结构,刚开始一直在看书,但是总是感觉似懂非懂,心想还不如自己操练一波,势必有所收获.现将实现代码发表此地,以备日后复习,若有错误或者建议,欢迎告知本人! 1. 节点类 class Nod ...

  4. 《数据结构与算法分析》学习笔记(三)——链表ADT

    今天简单学习了下链表,待后续,会附上一些简单经典的题目的解析作为学习的巩固 首先要了解链表,链表其实就是由一个个结点构成的,然后每一个结点含有一个数据域和一个指针域,数据域用来存放数据,而指针域则用来 ...

  5. 自己动手实现java数据结构(二) 链表

    1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是, ...

  6. [C++]线性链表之顺序表<二>

    /*   @content 线性链表之顺序表   @date 2017-3-21 1:06   @author Johnny Zen  */ /* 线性表     顺序表     链式表[带头指针/不 ...

  7. 数据结构入门之链表(C语言实现)

    这篇文章主要是根据<数据结构与算法分析--C语言描述>一书的链表章节内容所写,该书作者给出了链表ADT的一些方法,但是并没有给出所有方法的实现.在学习的过程中将练习的代码记录在文章中,并添 ...

  8. 用Python实现的数据结构与算法:链表

    一.概述 链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接(参考 <算法:C语言实现>). 根据结构的不同,链表可以 ...

  9. 【WIP_S3】链表

    创建: 2017/12/26 完成: 2018/01/14   [TODO]     S4, S5, S14来处理动态数组   CAF8A81B790F [github 地址]传送门  链表的定义   ...

随机推荐

  1. 饭卡 HDU - 2546(dp)

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  2. Linux命令之---diff

    命令介绍 diff命令可以酌行比较纯文本文件内的内容,并输出文件的差异. 命令格式 diff [option] [file1] [file2] 举例子 1)比较俩文本文件 [root@king ~]# ...

  3. DiyCode开源项目 AboutActivity分析

    1.首先看一下效果 这是手机上显示的效果: 1.1首先是一个标题栏,左侧一个左箭头,然后一个图标. 1.2然后下方是一个可以滑动的页面. 1.3分成了7个部分. 1.4DiyCode的图标. 1.5然 ...

  4. 校内考试之zay与银临(day1)

    T1大美江湖(洛谷P5006) zayの题解: 这个题的本质是模拟 不过有卡ceil的地方 ceil是对一个double进行向上取整,而对于int/int来说,返回值是int 举个生动的栗子 ceil ...

  5. JS 对于回调函数的理解,和常见的使用场景应用,使用注意点

      很经常我们会遇到这样一种情况: 例如,你需要和其他人合作,别人提供数据,而你不需要关注别人获取或者构建数据的方式方法. 你只要对这个拿到的数据进行操作. 这样,就相当于我们提供一个外在的函数,别人 ...

  6. jar包导入仓库中

    mvn install:install-file -Dfile=F:/kaptcha-2.3.jar -DgroupId=com.google.code.kaptcha -DartifactId=ka ...

  7. day 17 jQuery

    什么是jQuery? 可以把它认为是python中的模块,导入就可以使用模块中的功能. jQuery 的版本: 1.xx 系列 2.xx 系列 3.xx 系列 最常用的为1 系列,1系列最新版为1.1 ...

  8. 使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

    由于园子里有不少用户在使用dnspod,我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下,以免再有人踩着这个坑. 12月11日,我们登录到dnspod的后台时,大 ...

  9. Monkey log异常分析说明

    以下主要针对在Android-Phone项目中进行Monkey log进行分析和说明,可以对bug提交作为参考. 要求熟悉,应用的包名.也就是说那个应用包出现问题,该属于那个模块,应用包名是判断依据. ...

  10. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...