題目:
創建一個學生信息鏈表,每一個結點包括:學號、姓名、成績。實現鏈表的創建、顯示和查詢。查詢是指輸入一個學號,若是鏈表中存在該學號的的結點,則顯示此結點的數據。
源代碼:php
//科目:C++實驗3
//題目:創建一個學生信息鏈表,每一個結點包括:學號、姓名、成績。
//語言:C++
//做者:武葉
//創做時間:2012年3月20日
#include <iostream>
using namespace std;
static int N=0; //定義N記錄學生人數
/****定義結構體類型****/
typedef struct Node
{
int num;
char name[10];
float score;
struct Node *next;
}stNode;
/******初始化鏈表*******/
stNode * initlist()
{
struct Node *head; //定義頭指針
struct Node *p1,*p2;
p1=p2=new Node; //使p1,p2指向新的結點
cout<<"請按學號姓名成績依次輸入:"<<"\n";
cin>>p1->num;cin>>p1->name;cin>>p1->score;
head=NULL;
while(p1->num!=0)
{ //輸入學號以0結束
N++; //學生記錄加1
if(N==1)
head=p1;
else
p2->next=p1;
p2=p1; //使p1指向結點尾
p1=new Node; //申請新的結點,存放下個記錄
cin>>p1->num; cin>>p1->name;cin>>p1->score;
}
p2->next=NULL;
return(head); //返回頭指針
}
/************顯示鏈表內容*********/
void dispStLink(struct Node *head)
{
struct Node *p;
p=head;
cout<<"學號"<<"\t"<<"姓名"<<"\t"<<"成績"<<"\n";
for(int i=0;i<=20;i++)
{
cout<<p->num<<"\t"<<p->name<<"\t"<<p->score<<"\t"<<"\n"; p=p->next;
}
}
/*******查找結點*********/
stNode *search(struct Node *head,int number)
{
int k=0,j=N;
struct Node *p3;
p3=head;
while(j!=0){
if(p3->num==number)
{
cout<<"學號"<<"\t"<<"姓名"<<"\t"<<"成績"<<"\n"<<endl;
cout<<p3->num<<"\t"<<p3->name<<"\t"<<p3->score<<"\t"<<"\n";
}
else
p3=p3->next;
k++; //k記錄鏈表中不等於查找學號的個數
j--;
}
if(k==N) {cout<<"對不起,沒有該學號的信息"<<"\n"<<"\n";}
return 0;
}
/********刪除結點*********/
stNode * del(struct Node *head)
{
int num2,k=N;
struct Node *p4,*p5;
cout<<"請輸入刪除學生信息的學生學號:num=";cin>>num2;
p4=head;
while(num2!=p4->num&&p4->next!=NULL)
{ //沒有刪除結點的信息且指針不在結尾
p5=p4;
p4=p4->next;
} //指針後移
if(num2==p4->num)
{
if(p4==head)
head=p4->next;
else
p5->next=p4->next;
cout<<"刪除的學生信息爲:"<<"\n";
cout<<"學號"<<"\t"<<"姓名"<<"\t"<<"\t"<<"成績"<<"\n"<<endl;
cout<<p4->num<<"\t"<<p4->name<<"\t"<<p4->score<<"\t"<<"\n";
cout<<"刪除成功"<<"\n";
N=N-1; //使總紀錄數減1
}
else
{
cout<<"無此學生的結點"<<"\n";
}
return(head);
}
/**********建立結點**********/
int createStLink(struct Node *head,struct Node *stu)
{
struct Node *p6,*p7,*p8;
p7=head;
p6=stu;
if(head==NULL)
{
head=p6;p6->next=NULL;
}
else
{ //若是鏈表爲空則在頭結點建立信息
while(p6->num > p7->num && p7->next!=NULL)
{
p8=p7;
p7=p7->next;
}
if(p6->num<=p7->num)
{
if(head==p7)
head=p6;
else
p8->next=p6;
p6->next=p7;
}
else
{
p7->next=p6;p6->next=NULL;
}
}
N++;
return 1;
}
int main()
{
struct Node *H,*stud;
char M;
int num1;
H=initlist();
/******創建菜單*****/
while(M!='5')
{
if(H==NULL)
return 0;
else
{
cout<<"*********************************"<<"\n";
cout<<"一、建立結點信息"<<"\n"<<"二、查找結點信息"<<"\n"
<< "三、顯示結點信息"<<"\n"<<"四、刪除結點信息\n"<<"五、退出程序"<<"\n";
cout<<"*********************************"<<"\n";
cin>>M;
switch(M)
{
case '1':
cout<<"請按學號姓名成績依次輸入:"<<"\n";
case '2':
cout<<"請輸入要查找結點信息的學號:"<<"num=";
cin>>num1;
search(H,num1);
break;
case '3':
cout<<"全部學生信息以下:\n";
dispStLink(H);
break;
case '4':
H=del(H);
if(H==NULL)
cout<<"鏈表中沒有學生結點信息了"<<"\n";
break;
stud=new Node;
cin>>stud->num;
cin>>stud->name;
cin>>stud->score;
createStLink(H,stud);
dispStLink(H);
break;
}
}
}
cout<<"退出成功!"<<"\n";
return 0;
}
ios
更多詳細內容::::去學習ide