C语言编程有问

2024-12-21 20:55:46
推荐回答(1个)
回答1:

# include "stdio.h"//头文件
# include "stdlib.h"//头文件

typedef struct LinkList
//定义了一个叫LinkList的结构体,结构体包含了花括号内的成员,这个结构体所占内存大小为花括号内所有成员的和
{
struct LinkList * Next;
int data;
}* pLinkList;//这里是此结构体的别名,定义了这样的别名之后pLinkList == * LinkList

pLinkList initialization(void);//初始化链表函数
void print(pLinkList pH);//输出函数

int main(void)//主函数
{
pLinkList pH = initialization();
//定义了一个pLinkList类型的变量pH保存了初始化函数返回的头结点
print(pH);
//输出

return 0;
}

pLinkList initialization(void)
{
pLinkList pH = (pLinkList)malloc(sizeof(LinkList));//动态分配内存,pH指向这个内存
pLinkList pT = pH;//定义一个零时变量pT方便将链表‘挂’起来
pT->Next = NULL;//NULL == 0
int j = 1;//根据你所要求的1,3,5,7,9……将要赋给链表的值
if(NULL == pH)//查看内存分配是否成功
{
printf("动态内存分配失败,程序结束\n");
exit(-1);
}
for(int i = 0; i < 10; i++,j = j + 2)//10个链表节点,循环10次,创建10个节点‘挂’起来
{
pLinkList pNew = (pLinkList)malloc(sizeof(LinkList));//为pNew分配内存
pNew->data = j;//j赋给当前pNew->data;
pT->Next = pNew;//因为pT指向了pH所以第一次循环时,pT == pH,所以pT->Next指向了当前pNew
pNew->Next = NULL;//pNew在当前循环中为最后一个节点,所以->为NULL
pT = pNew;//pT保存了当前pNew,下次循环时,就可以时上一次的pNew->Next = 这次的pNew
/*
pT->Next = pNew;
pNew->Next = NULL;
pT = pNew;
这三句完成了链表串起来的操作
*/
}

return pH;
}

void print(pLinkList pH)
{
pLinkList pT = pH;//pT = pH
int i = 1;//计数器
while(NULL != pT->Next)//循环到最后一个节点
{
pT = pT->Next;//每次循环pT = pT->Next,也就是转到了下一个节点
printf("\n这里是链表的第%d个节点,这里保存的值为: %d\n", i, pT->data);//输出
i++;//计数器+1
}

return;
}