谁能帮我把下面的程序一句句的写出解释,是选修课的数据结构的,...
发布网友
发布时间:2024-02-08 09:48
我来回答
共3个回答
热心网友
时间:2024-07-24 05:34
#include <iostream>
#include <iomanip>
using namespace std;
//上面三行是必要的,引入头文件,相信你懂的
struct Link //一个结构体,看样子还是链表形式,就是有一个指针指本身结构体的意思,
//你一定要弄懂这个,毕竟当年哥也上过上学,知道整个题目就这里是精华,不懂的话找个懂的同学来教你,一定要学会啊.
{
char number[10];//一个最大长度为10的字符数组
char name[10];//一个最大长度为10的字符数组
float grade;//单精度的小数
Link *next;//一个Link的指针,指向下一个结构体。重点要会这个。
};
//这四个函数只是声明。因为它们真正的部分在下面(如果写上main上面,就不要这四个声明了),出场的时间比int main()晚会让main找不到的
Link *create_student(Link *);
int data_inquire(Link *);
void display(Link *);
void delete_list(Link *);
int main() //主函数
{
Link *list;//搞一个Link 结构体的 指针,
list = create_student(list);//调用create_student函数 然后你就到下面看create_student的运行。
//111111,看到下面有说来到这里了,然后就执行下面那句:data_inquire(list);
data_inquire(list);//又调用函数,又跑到函数下面去运行
//222222
delete_list(list);
cout<<list->number;
system("pause");
return 0;
}
Link *create_student(Link *head)//创建链表 。
{
char input,temp[10];//声明一些变量
Link *p,*q;//定义两个指针,用来轮流用
head = new Link;//为传进来的指针分配内存,这样它才可以用。
head->next = NULL; //让head里面的一个next设置为NULL
p = head;//赋值,于是我们就操作p就行了,不用再操作head.一般都是这样写,是为了防止找不到头,不过其实不用担心的.
cout<<"学号 姓名 成绩(以 # # -1 结束输入)"<<endl; //显示一句话
do{
q = new Link; //为q分配内存
cin>>q->number>>q->name>>q->grade; //说叫你输入三个值,当然,前面两个是要字符串,且不能超过10个.最后一个为数字(可以是小数)
q->next = NULL;//先设置它为NULL,因为不这样做,它可能会乱指的。
p->next = q;//把q赋值给p->next
p = p->next;//p等于它自己的下一个
if(strcmp(q->number,"#") == 0 && strcmp(q->name,"#") == 0 && q->grade == -1) //判断比较,如果输入的是 # # -1
return head; //就返回,表明create_student这个函数结束了,目光跳到//111111那里.
}while(true);//循环
}
int data_inquire(Link *head)//查询函数,前面有个int,说明函数结束后要 return 一个整数
{
Link *point; //指针
char stu_name[10];//一个数组
point = head->next;//因为head中是没有数据的(只有那个指针指向下一个结构),所以让point指向下一个,point中就直接有数据了
cout<<"\n输入查找姓名:";//显示一句话
cin>>stu_name;//输入一个字符串
while(point != NULL){ //如果这个链表还没到头,就循环
if(strcmp(stu_name,point->name) == 0){//对比一个point中的那个name,如果它的值与你输入的字符串相同
//相同就输出下面三句话,不相同就不运下面四句
cout<<setw(5)<<point->number
<<setw(5)<<point->name
<<setw(5)<<point->grade<<endl;
return 0;//直接返回,即运行又到了//222222那里了.
}
point = point->next; //指针指向下一个结构(内容又换了.)
}//如果循环到最后了都还没有,就运行下面那句
cout<<"本班无此人!"<<endl; //输出一句话
return 0;//你自己少写了这句啦,你看看data_inquire(Link *head)前面是不是有一个int啊,函数结束的时候要对应啊,
//当然后不是0也行,只要是整数,对应int 回应该
}
void delete_list(Link *head)//释放内存函数 void 就不用写return 啦
{
Link *p = head;
Link *q = head->next;
while(p){ //循环释放内存
delete p;,//对应回刚才用new分配的
p = q;
q = q->next;
}
//这个是用结构体实现链表的基本操作,你自己一定要会呀,大学里面就这几样要背的了,这是一定要会的~
热心网友
时间:2024-07-24 05:37
楼上的真有耐心
热心网友
时间:2024-07-24 05:41
字数限制,一下说不清,,楼主你过来私聊吧~~