2026-10-30 12:58:48
2026-06-03 23:57:37
2026-03-20 13:00:24
# include <stdio.h>
# include <stdlib.h>
# define StopCondition t!=0 //根据需求修改
typedef int DataType; //节点的数据域 的数据类型,视情况而定
typedef struct node
{
DataType data;
struct node *next;
} Node;
typedef Node* List;
/*********根据需求,有可能变更的函数接口*********/
void GetData(DataType *px);
void PrintData(DataType x);
/********标准链表接口******/
void PrintList(List li);
List CreatList();
void DestroyList(List li);
//测试main函数
int main(void)
{
List myList;
myList = CreatList(); //创建链表 ,输入0就结束输入
PrintList(myList); //打印
DestroyList(myList); //销毁
return 0;
}
void GetData(DataType *px)
{
while(1!=scanf("%d",px)) ////
{
fputs("输入有误,请重新输入\n",stderr);
while(getchar()!='\n')
;
}
}
void PrintData(DataType x)
{
printf("%d\n",x); //////
}
List CreatList()
{ //创建一个带头节点的链表
Node * phead;
Node *p1,*p2;
DataType t;
//创建头节点
phead = (Node*)malloc(sizeof(Node));
if(phead==NULL)
{
fputs("memory allocate error\n",stderr);
exit(-1);
}
phead->next=NULL;
//开始创建数据节点
GetData(&t); //获取节点的数据
while(StopCondition)
{
//开辟内存
p1 = (Node*)malloc(sizeof(Node));
if(p1==NULL)
{
fputs("memory allocate error\n",stderr);
exit(-1);
}
//填补节点的数据(数据域和指针域)
p1->data = t;
p1->next=NULL;
//链接
if(phead->next ==NULL)
phead->next = p1;
else
p2->next = p1;
//重置
p2=p1;
//再次获取数据,为下次创节点准备
GetData(&t);
}
return phead; //返回链表的头头节点的地址
}
void PrintList(List li)
{ //打印链表的所有节点,
Node*p = li->next;
while(p!=NULL)
{
PrintData(p->data);
p=p->next;
}
}
void DestroyList(List li)
{
//销毁链表
Node*p=li;
Node*t;
while(p!=NULL)
{
t=p;
free(t);
p=p->next;
}
}
2026-03-13 15:00:49
2026-03-03 01:18:54