#include <IOSTREAM>
using namespace std;
/*对象链表(new/delete)*/
#define LEN sizeof(stu)
//定义单向链表结点的数据类型
class stu
{
public:
char name[20];
int age;
int sex;
stu * Next;
};
void CreateList(int, stu **);
void PrintList( stu *);
void Delete(stu *);
//主函数中只需定义一个头结点指针即可
int main(void)
{
int n;
puts("请输入学生的个数N:");
cin>>n;
stu * head;
head = NULL;
CreateList(n, &head);//地址传递,head是一个地址变量,要对head本身的值进行修改必须将head的地址进行传递;若传递的是head变量内存储的值<NULL>
//,不能达到修改head本身值的目的.
PrintList(head);//指针地址值传递只是对其存储空间的值进行了一份拷贝,无法改变其本身的值。
Delete(head);//销毁堆中链表,new创建的链表
return 0;
}
//创建链表并实现数据输入
void CreateList(int n, stu ** p)
{
int i = 1;
stu * st1;
stu * st2;
st1 = new stu;
* p = st1;
while (i<=n)//循环用于连续产生新的堆中对象,并将其链接起来。
{
st2 = st1;
printf("请输入第%d个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):\n", i);
cin>>st2->name>>st2->age>>st2->sex;
st1 = new stu;
st2->Next = st1;
i++;
}
st2->Next = NULL;
st1 = NULL;//将不用的指针置空
st2 = NULL;
}
//输出链表内容
void PrintList(stu * head)
{
stu * p1;
stu * p2;
char * sex;
p1 = head;
p2 = p1;
cout<<"\n您输入的学生信息如下:\n";
while (p2 != NULL)
{
if(p2->sex == 0)
sex = "女";
else
sex = "男";
cout<<p2->name<<'\t'<<p2->age<<'\t'<<sex;
p1 = p2;
p2 = p1->Next;
puts("");//puts()输出字符串时会将字符串的结束符以回车输出,所以 puts(""); 起到了输出换行符的目的
}
p1 = p2 = NULL;//好习惯,将不用的指针置空。
sex = NULL;
}
//函数结束时释放申请的所有堆中空间
void Delete(stu * p)
{
stu * p1;
stu * p2;
p1 = p;
p2 = p1;
while (p2->Next != NULL)
{
p1 = p2->Next;
delete p2;
p2 = p1;
}
p2 = p1 = NULL;
}
/*
请输入学生的个数N:
5
请输入第1个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):
陈奕迅 23 1
请输入第2个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):
jion 22 1
请输入第3个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):
yonges 15 0
请输入第4个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):
winsoe 16 0
请输入第5个学生的信息,以次是姓名、年龄和性别(性别男用1,女用0表示):
susan 14 0
您输入的学生信息如下:
陈奕迅 23 男
jion 22 男
yonges 15 女
winsoe 16 女
susan 14 女
Press any key to continue
*/
C++对象链表的创建与销毁
最新推荐文章于 2024-05-01 18:29:49 发布