#include
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變量內存儲的值
//,不能達到修改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<name<<'\t'<age<<'\t'<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
*/