问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁能帮我把下面的程序一句句的写出解释,是选修课的数据结构的,...

发布网友 发布时间: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

字数限制,一下说不清,,楼主你过来私聊吧~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八个月孕妇痔疮怎么办 怀孕痔疮严重怎么缓解 孕妇能割痔疮吗 孕37周痔疮严重怎么办 孕37周痔疮可以顺产吗 怀孕晚期痔疮严重怎么办 我打开网上邻居,里面变成空的了,以前打开就有“宽带连接”和“本地连 ... 单位有些电脑打开网上邻居没东西显示是为什么? 生产线称重 梦比优斯奥特曼第35集19:38秒时,希卡利站起来时的那个背景音乐是... 梦比优斯奥特曼中希卡利出现时的音乐 {14546} normal block at 0x01D8...20 没有主体语言是什麽意思? 谁能给我解释一下这几段话的意思,要逐行来,挑重点,细... ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 老人80大寿蛋糕上写些什么? ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 我想买一个ps4,不过听说锁区了,那我买的GTA5还可以玩线上模式吗? 8点55分汉译英 东的东怎么组词 手机号1 24 手机号24小时内绑定了两个被限制 请问什么时候才能重 ... 早上发圈很开心的文案 早晨让人开心的阳光文案 如果地球遇上黑洞,怎么办。 如果一个黑洞向地球靠近,那么人类有没有办法避免灾难? GHOST硬盘对拷出错250581 什么是硬盘对拷,有什么用?请说的简单明了一些1 硬盘对硬盘拷贝时提示encounterd an NTFS w... 硬盘对拷什么原理,速度能这么快? 联想电脑硬盘对拷出现目标盘存在联想服务分区3 男人为什么有大姨爹 ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 验孕棒上的第二条线滑走了怎么回事 不通过手机可以在电脑上登陆吗? 试驾全新日产奇骏,你感觉他值得入手吗? 新奇骏三缸车怎么样?2 现在买新奇骏好还是老奇骏好9 我的wifi管家以前好用,后来我又换了个手机又下载上了现在管理不了是怎么... ...他说我的登录界面可能被窃取,我连着WIFI,网络超快, 争章格言怎样写才有创意? 肝、脾、肾多发襄肿吃中药效果如何? ...左肾囊肿,慢性肾炎,用中医治疗了一段时间后效果不是很理想。应该怎么... 下列医疗费用不纳入基本医疗保险基金支付范围的有(). 签订买房合同后想退房,可以吗?287 已经签了购房合同,如果毁约会有什么后果 过期的纯牛奶能用来洗澡吗 雅迪电动车充电时和关闭后会发出呻吟声正常吗 我的雅迪电瓶车在充电时会不时滴 滴的叫 会是怎么回事 大家帮分析下... 心脏的4个腔中,其收缩能力最强的是什么 ...请据图回答问题:(1)心脏分为四个腔,其中心肌最发达的是___.(2... b心子是哪个位置