您的位置:首页 > 其它

单链表的初始化

2012-07-04 00:00 746 查看
与线性表时一样,我们接下来慢慢实现链表ADT上的各种功能。首先还是最基本的,就是单链表的初始化。首先我们在main函数中 LinkList L; 这么定义了一个链表。因为需要对链表本身进行操作,那么假设函数定义为 InitList(),那么需要地址传递,写成 i=InitList(&L);。

接下来就是函数的设计了。初始化一个链表需要做什么事情呢?头指针是必须要有的,头结点为了规范化操作,最好也得有。那么第一步就是:创建一个头结点,并且让头指针指向这个头结点。

其实头指针也有了。参数 *L 传入的 L其实就是链表的首地址,也就是头指针。接下来也就是在内存开辟一个区域来作为头结点。

*L=(LinkList) malloc (sizeof(Node)); //创建一个结点

此处返回给L的是一个指针,并且赋给了头指针。*L其实就是头结点,L则为头指针。

接下来还得给链表的首元结点赋值为 NULL,因为 *L是头结点,那么 (*L)->next就是首元结点,所以 (*L)->next=NULL; 这么写就能让首元结点的指针域为空。所以函数设计完毕了。

实现代码如下:

/* 初始化顺序线性表 */
Status InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
if(!(*L)) /* 存储分配失败 */
{
return ERROR;
}
(*L)->next=NULL; /* 指针域为空 */
return OK;
}


*L=(LinkList)malloc(sizeof(Node)); 这一句代码里面,L是个指针,指向头结点。*L就是指头结点。if(!(*L)) 就是头结点分配失败。

嗯。补全成完整的程序吧。


#include "stdio.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
/* 定义LinkList */
typedef struct Node *LinkList;/* 初始化顺序线性表 */ Status InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */ if(!(*L)) /* 存储分配失败 */ { return ERROR; } (*L)->next=NULL; /* 指针域为空 */ return OK; }/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(LinkList L)
{
int i=0;
LinkList p=L->next; /* p指向第一个结点 */
while(p)
{
i++;
p=p->next;
}
return i;
}
int main()
{
LinkList L;
Status i;
i=InitList(&L);
printf("链表L初始化完毕,ListLength(L)=%d\n",ListLength(L));
}

延伸阅读

此文章所在专题列表如下:

第01话:线性表的概念与定义

第02话:线性表的抽象数据类型ADT定义

第03话:线性表的顺序存储结构

第04话:线性表的初始化

第05话:线性表的遍历、插入操作

第06话:判断线性表是否为空与置空操作

第07话:线性表的查找操作

第08话:线性表删除某个元素

线性表顺序存储的优缺点

线性表链式存储结构的由来与基本概念

单链表的头指针、头结点与首元结点

单链表的结构体定义与声明

单链表的初始化

单链表的插入与遍历操作

单链表的删除某个元素的操作

获取单链表中的指定位置的元素

查找某数在单链表中的位置

用头插法实现单链表整表创建

用尾插法实现单链表整表创建

将单链表重置为空表

单链表反转/逆序的两种方法

单链表反转/逆序的第三种方法

求单链表倒数第N个数

用标尺法快速找到单链表的中间结点

如何判断链表是否有环的存在

单链表建环,无环链表变有环

删除单链表中的重复元素

本文地址:http://www.nowamagic.net/librarys/veda/detail/2222,欢迎访问原出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: