单链表结点的结构体表示
typedef struct node
{
int data;
struct node *next;
}Node, *LinkList;
/* *********结构体定义的理解 ************ */
/* 这里的Node是结构体struct node的一个别名 */
/* 这里的*LinkList也是结构体struct node的一个别名 */
/* 换言之LinkList是结构体struct node类型的指针的别名 */
/* 也就是说struct node *p;这条语句等同于LinkList p; */
/* LinkList *L相当于struct node **L,是二级指针,如:
int i;
int *pi = &i; //这里定义了一个指向整型i的指针pi, &表示取地址符号
int **ppi = π //ppi就是一个二级指针,其指向指针pi的地址
*/
单链表初始化的功能函数
/* *********初始化单链表表 ************ */
/* 初始化成功返回1,初始化失败返回0 */
int InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
/* 此处返回给L的是一个指针,并且赋给了头指针 */
/* *L其实就是头结点,L则为头指针 */
if(!(*L)) /* 存储分配失败 */
{
return 0;
}
(*L)->next=NULL; /* 指针域为空 */
return 1;
}
单链表测长的功能函数
/* 初始条件:单链表表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(LinkList L)
{
int num=0;
LinkList p=L->next; /* p指向第一个结点 */
while(p)
{
num++;
p=p->next;
}
return num;
}
完整的可执行程序如下:
#include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}Node, *LinkList;
/* *********结构体定义的理解 ************ */
/* 这里的Node是结构体struct node的一个别名 */
/* 这里的*LinkList也是结构体struct node的一个别名 */
/* 换言之LinkList是结构体struct node类型的指针的别名 */
/* 也就是说struct node *p;这条语句等同于LinkList p; */
/* LinkList *L相当于struct node **L,是二级指针,如:
int i;
int *pi = &i; //这里定义了一个指向整型i的指针pi, &表示取地址符号
int **ppi = π //ppi就是一个二级指针,其指向指针pi的地址
*/
/* *********初始化单链表 ************ */
/* 初始化成功返回1,初始化失败返回0 */
int InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
/* 此处返回给L的是一个指针,并且赋给了头指针 */
/* *L其实就是头结点,L则为头指针 */
if(!(*L)) /* 存储分配失败 */
{
return 0;
}
(*L)->next=NULL; /* 指针域为空 */
return 1;
}
/* 初始条件:单链表表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(LinkList L)
{
int num=0;
LinkList p=L->next; /* p指向第一个结点 */
while(p)
{
num++;
p=p->next;
}
return num;
}
int main()
{
LinkList L;
int n; //存放链表结点个数
n=InitList(&L);
cout << "链表L初始化完毕,ListLength(L)= " << ListLength(L) <<endl;
system("pause");
return 0;
}
运行结果:
![]()