c语言单链表实现存储,数据结构C语言版 线性表的单链表存储结构表示和实现.doc...

数据结构C语言版 线性表的单链表存储结构表示和实现

#include

#include

#include

/*

数据结构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(p&&j

{

p=p->next;

j++;

}

if(!p||j>i) // 第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地数据元素,且不是第-个,则用pre_e返

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值