单链表的初始化
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; 这么写就能让首元结点的指针域为空。所以函数设计完毕了。
实现代码如下:
*L=(LinkList)malloc(sizeof(Node)); 这一句代码里面,L是个指针,指向头结点。*L就是指头结点。if(!(*L)) 就是头结点分配失败。
嗯。补全成完整的程序吧。
第01话:线性表的概念与定义
第02话:线性表的抽象数据类型ADT定义
第03话:线性表的顺序存储结构
第04话:线性表的初始化
第05话:线性表的遍历、插入操作
第06话:判断线性表是否为空与置空操作
第07话:线性表的查找操作
第08话:线性表删除某个元素
线性表顺序存储的优缺点
线性表链式存储结构的由来与基本概念
单链表的头指针、头结点与首元结点
单链表的结构体定义与声明
单链表的初始化
单链表的插入与遍历操作
单链表的删除某个元素的操作
获取单链表中的指定位置的元素
查找某数在单链表中的位置
用头插法实现单链表整表创建
用尾插法实现单链表整表创建
将单链表重置为空表
单链表反转/逆序的两种方法
单链表反转/逆序的第三种方法
求单链表倒数第N个数
用标尺法快速找到单链表的中间结点
如何判断链表是否有环的存在
单链表建环,无环链表变有环
删除单链表中的重复元素
本文地址:http://www.nowamagic.net/librarys/veda/detail/2222,欢迎访问原出处。
接下来就是函数的设计了。初始化一个链表需要做什么事情呢?头指针是必须要有的,头结点为了规范化操作,最好也得有。那么第一步就是:创建一个头结点,并且让头指针指向这个头结点。
其实头指针也有了。参数 *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,欢迎访问原出处。
相关文章推荐
- linux下链表要初始化
- C语言实现链表之双向链表(二)结点内存申请及数据初始化
- 链表初始化
- 双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
- 双链表的初始化,建立,插入,查找,删除。
- 链表(LinkList)的设计与实现(初始化,创建,插入,删除,逆置)
- 单链表的初始化,建立,插入,查找,删除
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- 单链表的初始化、建立、插入、查找、删除
- 双向链表的建立、初始化和输出
- c++链表的初始化,头插,尾插,遍历
- 线性表的单链表的定义、初始化等操作
- C++ 链表移动 类初始化
- 数据结构队列的链表实现初始化,出队,出队以及显示
- 链表初始化看C语言的二级指针(转)
- 由链表初始化看C语言的二级指针
- 初始化建立链表的两种方法
- Linux源码中链表的声明和初始化
- 初始化链表C++实现
- 双链表( 初始化,建立,插入,查找,删除 )