#include <stdio.h>
#include <malloc.h>
void creat_link(int num);
void Printf_Link(struct stu *Phead,int num);
struct stu
{
int age;
struct stu *pstu;
};
struct stu *Phead = NULL; //头指针
struct stu *Pacco; //伴随指针
int main()
{
creat_link(5);
Printf_Link(Phead,5);
return 0;
}
//创建一个链表
void creat_link(int num)
{
struct stu * p; //保存动态内存分配的地址
int ag; //保存输入的学生的年龄
int i;
for(i=0; i<num; i++)
{
printf("请输入第%d个学生的年龄:\n",(i+1));
scanf("%d",&ag);
p = (struct stu*)malloc(sizeof(struct stu)); //动态分配一个内存
if(p == NULL) //判断内存是否分配成功
{
printf("error!!!\n");
return;
}
if(i == 0) //判断是否为链表第一个结点 第一个的地址给头指针和伴随指针 伴随指针可以找到最后一个结点
{
Phead = p;
Pacco = p;
}
else //不是第一个结点要把地址给伴随指针和上个结点
{
Pacco->pstu = p; //给上个结点
Pacco = p; //给伴随指针
}
Pacco->age = ag; //把输入的年龄保存到结点
}
}
//打印链表
void Printf_Link(struct stu *Phead,int num)
{
int i;
struct stu * p;
p = Phead; //先把头指针拿过来(有头指针就可以找到整个链表),不能修改头指针,我们可以随便修改p
for(i=0; i<num; i++)
{
printf("学生%d的年龄:%d\n",(i+1),p->age);
p = p->pstu; //让地址p再指向下一个结点
}
}
#include <malloc.h>
void creat_link(int num);
void Printf_Link(struct stu *Phead,int num);
struct stu
{
int age;
struct stu *pstu;
};
struct stu *Phead = NULL; //头指针
struct stu *Pacco; //伴随指针
int main()
{
creat_link(5);
Printf_Link(Phead,5);
return 0;
}
//创建一个链表
void creat_link(int num)
{
struct stu * p; //保存动态内存分配的地址
int ag; //保存输入的学生的年龄
int i;
for(i=0; i<num; i++)
{
printf("请输入第%d个学生的年龄:\n",(i+1));
scanf("%d",&ag);
p = (struct stu*)malloc(sizeof(struct stu)); //动态分配一个内存
if(p == NULL) //判断内存是否分配成功
{
printf("error!!!\n");
return;
}
if(i == 0) //判断是否为链表第一个结点 第一个的地址给头指针和伴随指针 伴随指针可以找到最后一个结点
{
Phead = p;
Pacco = p;
}
else //不是第一个结点要把地址给伴随指针和上个结点
{
Pacco->pstu = p; //给上个结点
Pacco = p; //给伴随指针
}
Pacco->age = ag; //把输入的年龄保存到结点
}
}
//打印链表
void Printf_Link(struct stu *Phead,int num)
{
int i;
struct stu * p;
p = Phead; //先把头指针拿过来(有头指针就可以找到整个链表),不能修改头指针,我们可以随便修改p
for(i=0; i<num; i++)
{
printf("学生%d的年龄:%d\n",(i+1),p->age);
p = p->pstu; //让地址p再指向下一个结点
}
}