- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.
. . .
#include stdio.h
#include malloc.h
#include stdlib.h
/*
数据结构C语言版 线性表的单链表存储结构表示和实现
P28-31
编译环境:Dev-C++ 4.9.9.2
日期:2011年2月10日
*/
typedef int ElemType;
// 线性表的单链表存储结构
typedef struct LNode
{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode, *LinkList;
// typedef struct LNode *LinkList; // 另一种定义LinkList的方法
// 构造一个空的线性表L
int InitList(LinkList *L)
{
/*
产生头结点L,并使L指向此头结点,头节点的数据域为空,不放数据的。
void * malloc(size_t)
这里对返回值进行强制类型转换了,返回值是指向空类型的指针类型。
*/
(*L) = (LinkList)malloc( sizeof(struct LNode) );
if( !(*L) )
exit(0); // 存储分配失败
(*L)-next = NULL; // 指针域为空
return 1;
}
// 销毁线性表L,将包括头结点在内的所有元素释放其存储空间。
int DestroyList(LinkList *L)
{
LinkList q;
// 由于单链表的每一个元素是单独分配的,所以要一个一个的进行释放
while( *L )
{
q = (*L)-next;
free( *L ); //释放
*L = q;
}
return 1;
}
/*
将L重置为空表,即将链表中除头结点外的所有元素释放其存
储空间,但是将头结点指针域置空,这和销毁有区别哦。不改变L,所以
不需要用指针。
*/
int ClearList( LinkList L )
{
LinkList p, q;
p = L-next; // p指向第一个结点
while( p ) // 没到表尾则继续循环
{
q = p-next;
free( p ); //释放空间
p = q;
}
L-next = NULL; // 头结点指针域为空,链表成了一个空表
return 1;
}
// 若L为空表(根据头结点L-next来判断,为空则是空表),则返回1,
// 否则返回0。
int ListEmpty(LinkList L)
{
if( L-next ) // 非空
return 0;
else
return 1;
}
// 返回L中数据元素个数。
int ListLength(LinkList L)
{
int i = 0;
LinkList p = L-next; // p指向第一个结点
while(p) // 没到表尾,则继续循环
{
i++;
p=p-next;
}
return i;
}
// 算法2.8 P29
// L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并
// 返回1,否则返回0。
int GetElem(LinkList L,int i,ElemType *e)
{
int j = 1; // j为计数器
LinkList p=L-next; // p指向第一个结点
while(pji) // 顺指针向后查找,直到p指向第i个元素或p为空
{
p=p-next;
j++;
}
if(!p||ji) // 第i个元素不存在
return 0;
*e = p-data; // 取第i个元素
return 1;
}
// 返回L中第1个与e满足关系compare()的数据元素的位序。
// 若这样的数据元素不存在,则返回值为0
int LocateElem(LinkList L,ElemType e,int(*compare)(ElemType,ElemType))
{
int i=0;
LinkList p=L-next;
while(p) //将链表的每一个元素进行对比
{
i++;
if(compare(p-data,e)) // 找到这样的数据元素
return i;
p=p-next;
}
return 0;
}
// 若cur_e是L的
文档评论(0)