标签:
#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 */
标签:
原文地址:http://blog.csdn.net/u010738823/article/details/51341022