#include <stdio.h>//printf
#include <stdlib.h>//malloc
#include <string.h>//strlen
typedef int Elemtype; //数据元素的类型
//数据节点
typedef struct node
{
Elemtype data; //数据域:保存数据本身用的
struct node *next; //指针域:用来保存关系用的,保存下一个数据节点的地址
}Node;
//头结点
typedef struct head
{
Node *first; //保存的是首节点的地址
Node *last; //保存的是尾结点的地址
int num; //保存的是链表中数据节点的个数
}Head;
/*
Create_LinklistHead:创建一条带头结点的单链表
@return : 返回创建好的头结点的地址
*/
Head *Create_LinklistHead(void)
{
//先创建一个头结点并且对其初始化
Head *head = malloc(sizeof(Head));
head->first = head->last = NULL;
head->num = 0;
printf("请输入数据:\n");
Elemtype d;
while(1)
{
//1.从终端上获取用户输入
scanf("%d",&d);
if(d == 0)
{
break;
}
//2.创建一个数据节点保存获取到的数据
Node *pnew = malloc(sizeof(*pnew));
pnew->data = d;
pnew->next = NULL;
//3.将新节点插入到链表中去
if(head->num == 0)
{
head->first = head->last = pnew;
}
else//尾插法
{
head->last->next = pnew;
head->last = pnew;
}
head->num++;
}
return head;
}
/*
Print_LisklistHead:将一条带头节点的单链表打印出来
*/
void Print_LisklistHead(Head *head)
{
printf("此链表中有%d个节点:\n",head->num);
Node *p = head->first;
while(p)
{
printf("%d ",p->data);
p = p->next;
}
putchar('\n');
return ;
}
int main()
{
//创建一条带头结点的单链表
Head *head = Create_LinklistHead();
printf("头结点的地址为%p,头结点中的first : %p,头结点中的last : %p,链表节点个数为%d\n",head,head->first,head->last,head->num);
Print_Lisklist(head->first);
}
C语言——数据结构——创建一条带头结点的单链表
最新推荐文章于 2023-05-12 14:57:54 发布