实验八 结构体与链表

合集下载

实验报告

实验报告

实验八链表编程#include<iostream.h>struct node{int date;node *next;};node* jianli(){intn,i;node *haed=NULL,*p=NULL,*u=NULL; cout<<"输入链表的大小:\n"; cin>>n;haed=new node;u=haed;cout<<"输入数值\n";cin>>u->date;for( i=1;i<n;i++){p=new node;u->next=p;u=p;cout<<"输入数值\n";cin>>p->date;}u->next=NULL;returnhaed;}voidshuchu(node *m){cout<<"该链表为:";for(int j=0;j<6;j++){cout<<m->date<<" ";m=m->next;}cout<<"\n";}void search(node *m){int n;cout<<"输入序号:";cin>>n;node *p=m,*sea;for(int i=1;;i++){sea=p;p=p->next;if(i==n){cout<<"输出值为:"<<sea->date<<endl;break;}}}void search2(node *m){int n;cout<<"输入值:";cin>>n;node *p=m,*sea;for(int i=1;;i++){sea=p;p=p->next;if(sea->date==n){cout<<"输出序号:"<<i<<endl;break;}}}voidcharu(intn,intx,node *m){node *p=m,*sea,*k;for(int i=1;;i++){sea=p;p=p->next;if(i==n){k=new node;k->date=x;sea->next=k;k->next=p;break;}}p=m;cout<<"输出链表:"; while(1){cout<<p->date<<" "; if(p->next==NULL)break;p=p->next;}cout<<"\n";}shanchu(ints,node *m) {node *p=m,*sea=m;for(int i=1;;i++){if(i==s){sea->next=p->next;break;}sea=p;p=p->next;}p=m;cout<<"输出链表:"; while(1){cout<<p->date<<" "; if(p->next==NULL)break;p=p->next;}}void main(){intn,x,s;node *f=jianli(); shuchu(f);search(f);search2(f);cout<<"插入结点";cin>>n;cout<<"输入值:";cin>>x;charu(n,x,f);cout<<"输入要删除的结点:";cin>>s;shanchu(s,f);cout<<endl;}错误与总结:一个链表的建立要申请动态指针,把前一个结构体中的指针变量指向新建的地址,链表就可以连接起来了。

C语言实验八

C语言实验八

实验8 结构体、共用体与枚举类型一、实验目的和要求1.掌握枚举类型的基本使用方法。

2.掌握共用体的概念和应用。

3.掌握结构体变量及结构体数组的定义和使用。

4.掌握简单链表的基本使用方法。

二、实验内容和步骤1.有5个学生,每个学生的数据包括学号、姓名、性别、4门课的成绩,从键盘输入5个学生的数据,要求输出4门课的平均成绩,以及平均成绩最高的学生信息(包括学号、姓名、性别、4门课的成绩、平均分数)。

同时要求用in函数输入5个学生数据;用aver函数求平均分;用max函数找出平均成绩最高的学生数据;学生的数据在out函数中输出。

2.输入和运行以下程序。

#include <stdio.h>union data{char c[4];long b;int i[2];};main(){union data s;scanf("%c,%c,%c,%c",&s.c[0],&s.c[1],&s.c[2],&s.c[3]);printf("i[0]=%d,i[1]=%d\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c\n",s.i[0],s.i[1],s.b,s.c[0],s.c[1],s.c[2],s.c[3]);}(1)输入4个字符a,b,c,d给s.i[0],s.c[1],s.c[2],s.c[3],并分析运行结果。

(2)将scanf()改为:scanf("%ld",&s.b);输入876543给b,分析运行结果。

3.请用枚举类型表示一年的十二个月份,并输出每个月的天数。

4.建立一个有5个结点的单向链表,每个结点包含姓名、年龄和工资。

编写两个函数,一个用于建立链表,另一个用来输出链表。

5.在上面的基础上,写一函数find,根据姓名查找一个结点,并输出该结点信息。

6.在上面的基础上,写一函数del,根据姓名(假定姓名不能重名)删除一个结点,并输出删除后的链表。

数据结构实验报告2

数据结构实验报告2

数据结构实验报告2一、实验目的本次数据结构实验旨在通过实际操作和编程实践,深入理解和掌握常见的数据结构,如链表、栈、队列、树等,并能够运用所学知识解决实际问题,提高编程能力和算法设计能力。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容(一)链表的实现与操作1、单向链表的创建首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。

然后,通过函数实现了单向链表的创建,从用户输入获取节点的数据,依次创建新节点并连接起来。

2、链表的遍历编写函数实现对单向链表的遍历,依次输出每个节点的数据。

3、链表的插入与删除实现了在指定位置插入节点和删除指定节点的功能。

插入操作时,需要找到插入位置的前一个节点,修改指针完成插入。

删除操作时,同样找到要删除节点的前一个节点,修改指针并释放删除节点的内存。

(二)栈的实现与应用1、栈的基本操作使用数组实现了栈的数据结构,包括入栈、出栈、判断栈空和获取栈顶元素等操作。

2、表达式求值利用栈来实现表达式求值的功能。

将表达式中的数字和运算符分别入栈,按照运算规则进行计算。

(三)队列的实现与应用1、队列的基本操作使用循环数组实现了队列,包括入队、出队、判断队空和队满等操作。

2、模拟银行排队系统通过创建队列来模拟银行客户的排队情况,实现客户的入队和出队操作,统计平均等待时间等。

(四)二叉树的遍历1、二叉树的创建采用递归的方式创建二叉树,用户输入节点数据,构建二叉树的结构。

2、先序、中序和后序遍历分别实现了二叉树的先序遍历、中序遍历和后序遍历,并输出遍历结果。

四、实验结果与分析(一)链表实验结果成功创建、遍历、插入和删除单向链表。

通过对链表的操作,深入理解了链表的动态存储特性和指针的运用。

在插入和删除操作中,能够正确处理指针的修改和内存的释放,避免了内存泄漏和指针错误。

(二)栈实验结果栈的基本操作运行正常,能够正确实现入栈、出栈等功能。

数据结构链表实验报告

数据结构链表实验报告

实验报告填写说明(实验项目名称、实验项目类型必须与实验教学大纲保持一致)1.实验环境:实验用的软、硬件环境。

2.实验目的:根据实验教学大纲,写出实验的要求和目的。

3.实验原理:简要说明本实验项目所涉及的理论知识。

4.实验方案:这是实验报告极其重要的容。

对于验证性验,要写清楚操作方法,需要经过哪几个步骤来实现其操作。

对于设计性和综合性实验,还应写出设计思路和设计方法。

对于创新性实验,还应注明其创新点。

5.实验过程:写明执行实验方案的实验过程。

6.实验结论:根据实验过程中得到的结果,做出结论。

7.实验小结:本次实验的体会和建议。

8.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价和成绩。

1 实验环境:VC++6.02 实验目的 :掌握单链表的基本操作在链式存储结构上的实现。

3实验原理:(1)#define MAXSIZE 5 //链表的最大长度typedef struct{ElemType data;int cur;}component,SLinkList[MAXSIZE];(2)动态分配的物理结构,每个结点值域指向其直接后继结点,指针为数据元素之间逻辑关系的映象。

4实验方案:根据链表的结构编写主函数,调用链表的构造空表算法,查找算法,插入算法以及删除算法,验证算法的正确性。

5实验过程:(1).编写算法以及主函数(2).编译运行出错,查找错误(3).改正错误,重新编译运行,没有错误(4).输入测试数据,验证结果,得出结论(5).保存结果,写入实验报告中6实验结论附录1:源程序。

数据结构的实验报告

数据结构的实验报告

一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。

二、实验内容1. 线性表(1)顺序表1)初始化顺序表2)向顺序表插入元素3)从顺序表删除元素4)查找顺序表中的元素5)顺序表的逆序操作(2)链表1)创建链表2)在链表中插入元素3)在链表中删除元素4)查找链表中的元素5)链表的逆序操作2. 栈与队列(1)栈1)栈的初始化2)入栈操作3)出栈操作4)获取栈顶元素5)判断栈是否为空(2)队列1)队列的初始化2)入队操作3)出队操作4)获取队首元素5)判断队列是否为空3. 树与图(1)二叉树1)创建二叉树2)遍历二叉树(前序、中序、后序)3)求二叉树的深度4)求二叉树的宽度5)二叉树的镜像(2)图1)创建图2)图的深度优先遍历3)图的广度优先遍历4)最小生成树5)最短路径三、实验过程1. 线性表(1)顺序表1)初始化顺序表:创建一个长度为10的顺序表,初始化为空。

2)向顺序表插入元素:在顺序表的第i个位置插入元素x。

3)从顺序表删除元素:从顺序表中删除第i个位置的元素。

4)查找顺序表中的元素:在顺序表中查找元素x。

5)顺序表的逆序操作:将顺序表中的元素逆序排列。

(2)链表1)创建链表:创建一个带头结点的循环链表。

2)在链表中插入元素:在链表的第i个位置插入元素x。

3)在链表中删除元素:从链表中删除第i个位置的元素。

4)查找链表中的元素:在链表中查找元素x。

5)链表的逆序操作:将链表中的元素逆序排列。

2. 栈与队列(1)栈1)栈的初始化:创建一个栈,初始化为空。

2)入栈操作:将元素x压入栈中。

3)出栈操作:从栈中弹出元素。

4)获取栈顶元素:获取栈顶元素。

5)判断栈是否为空:判断栈是否为空。

(2)队列1)队列的初始化:创建一个队列,初始化为空。

2)入队操作:将元素x入队。

3)出队操作:从队列中出队元素。

C语言结构体与链表(总结)

C语言结构体与链表(总结)
2013-7-10 18
C程序设计快速进阶大学教程
12.1.5 结构体与指针
例12.4 用指针变量输出结构体数组。 #include<stdio.h> struct student { int iNum; char *pcName; char cSex; float fScore; }strStuArr[5]={ {101,"Zhou ping",'M',45},{102,"Zhang ping",'M',62.5}, {103,"Liou fang",'F',92.5}, {104,"Cheng ling",'F',87}, {105,"Wang ming",'M',58} }; int main() { struct student *pStrStudent; /*指针指向数组开始*/ pStrStudent=strStuArr; printf("No\tName\t\t\tSex\tScore\t\n"); /*通过移动指针访问数组*/ for(pStrStudent=strStuArr;pStrStudent<strStuArr+5;pStrStudent++) printf("%d\t%s\t\t%c\t%f\t\n",pStrStudent->iNum, pStrStudent->pcName,pStrStudent->cSex,pStrStudent->fScore); return 0; }
struct student *pStrStudent; pStrStudent =&strStu1;

C语言 结构体与链表

C语言  结构体与链表

CHAPTER 10第10章结构体与共用体学习目标本章主要介绍结构体的定义和使用方法,然后介绍链表的概念和相关操作,最后介绍两种新的数据类型——共用体和枚举。

通过本章的学习,需要掌握结构体的概念与结构体类型的定义方法,熟练掌握结构体变量的定义、引用和初始化方法,掌握链表的概念,熟练掌握链表的相关操作,了解共用体和枚举的概念及其使用方法。

实际问题中,经常需要对一些类型不同但又相互关联的数据进行处理。

比如,对一个学生而言,他的学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)等数据都与该学生有联系。

如果将num、name、sex、age、score分别定义成相互独立的简单变量,则无法反映它们之间的内在联系;又因为这些数据彼此类型不同,而数组只能对同种类型的成批数据进行处理,所以,此时也无法使用数组。

这就需要有一种新的数据类型,它能将具有内在联系的不同类型的数据组合成一个整体,在C语言里,这种数据类型就是“结构体”。

结构体属于构造数据类型,它由若干成员组成,成员的类型既可以是基本数据类型,也可以是构造数据类型,而且可以互不相同。

由于不同问题需要定义的结构体中包含的成员可能互不相同,所以,C语言只提供定义结构体的一般方法,结构体中的具体成员由用户自己定义。

这样,编程人员可以根据实际需要定义各种不同的结构体类型。

10.1 结构体结构体遵循“先定义后使用”的原则,其定义包含两个方面,一是定义结构体类型;二是定义该结构体类型的变量。

10.1.1 结构体类型的定义格式:struct 结构体类型名{类型1 成员名1;类型2 成员名2;类型n 成员名n;};功能:定义一种结构体类型。

例如,图10.1所示结构体类型可有如下定义:图10.1 struct student结构体类型组织结构图struct date{int year;int month;int day;};struct student{int num;char name[20];char sex;struct date birthday;float score;};【说明】①“结构体类型名”与“成员名”都遵循标识符命名规则。

淮阴工学院c++实验报告实验八结构和链表

淮阴工学院c++实验报告实验八结构和链表

实验八结构体与链表一、实验目的和要求1.掌握结构体类型、结构体变量的基本概念;2.掌握结构体指针、结构体数组的应用;3.掌握链表的基本概念;4.掌握链表的基本操作与应用,包括建立链表、遍历链表、插入结点、删除结点、查找结点等。

二、相关知识点1.结构体类型:定义:struct 结构类型名{数据类型数据项1;数据类型数据项2;…………………….数据类型数据项n;}2.结构体变量:1.定义:(1)间接定义法──先定义结构类型、再定义结构变量struct 结构类型名结构变量;(2)直接定义法──在定义结构类型的同时定义结构变量struct 结构类型名{………}结构变量表;2.结构变量的初始化与引用:(1)如:struct std_info student={"000102","张三","男",{1980,9,20}};(2)结构变量的引用规则,对于结构变量,要通过成员运算符“.”,逐个访问其成员即结构变量.成员3.结构体指针:(1)使用指向结构变量的指针来访问结构变量的各个成员。

struct std_info *p_std=&student(2)使用指向结构数组的指针来访问结构数组struct std_info *p_std=student;4.结构体数组结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。

struct std_info student[3]={{“000102”, “张三”,“男”,{1980,9,20}},{“000105”,“李四”,“男”,{1980,8,15}},{“000112”, “王五”,“女”,{1980,3,10}}};5.链表的基本操作与应用:(1)建立链表:创建静态链表,创建动态链表(2)访问链表(3)插入结点(4)删除结点(5)查找结点(6)链表的释放。

三、实验内容1.定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八结构体
一、实验目的
1.掌握结构体的基本概念与定义方式
2.掌握结构体变量的定义及使用
3. 掌握链表的定义及使用
4. 掌握共用体的定义及使用
二、实验要求
1.认真完成实验内容并得到正确的程序运行结果。

2.为你的程序加上注释,使得其清晰可读。

3.利用调试程序来修改你程序的逻辑错误
三、主要仪器及耗材
计算机及VC6软件
四、基础实验
1.(选做)输入以下程序,查看输出结果。

#include <stdio.h>
struct stu
{
int num;
char name[10];
int age;
};
void fun(struct stu *p)
{
printf("%s\n",(*p).name);
}
void main()
{
struct stu students[3]={{9801,"zhang",20},
{9802,"long",21},
{9803,"xue",19}};
fun(students+2);
}
输出: xue
2. 输入以下程序,查看输出结果。

#include <stdio.h>
struct n_c
{
int x;
char c;
};
void main()
{
void func(struct n_c b);
struct n_c a={10,'x'};
func(a);
printf("%d,%c\n",a.x,a.c);
}
void func(struct n_c b)
{
b.x=20;
b.c='y';
}
输出10,x
3.程序填空
定义一个结构体用于表示学生的信息,包括学号、姓名和成绩,输入一个学生信息,并输出这些信息。

#include <stdio.h>
int main()
{
struct student
{
};
struct student s;
printf("请输入学号、姓名和成绩:");
printf("学号姓名成绩\n");
return 0;
}
输出示例:
4.编程。

定义结构体Point表示点,具有x、y两个成员变量,定义结构体Circle表示圆,具有圆心与半径两个成员变量,定义圆变量,输入圆心及半径,输出圆面积及圆心坐标。

输出示例:
五、拓展实验
学生考试结束后,要对某班一门课的考试信息进行分析,主要功能包括:
1.录入学生信息;
2.输出学生信息;
3.查找最高分学生的信息;
4.根据成绩排序;
5.根据姓名进行查找。

(本程序可以用结构体实现,也可以用链表实现,学生可自由选择)
程序一:用结构体实现
程序结构如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
typedef struct student //学生数据的存储数据类型定义
{
int order;
char num[11];
char name[9];
int score;
}STU;
void fout(STU s[],int n) //输出数组中所有学生数据的函数
{
}
void fin(STU s[],int n) //输入学生数据的函数
{
}
void fmax(STU s[],int n) //查找最高分学生信息的函数
{
}
void fsort(STU s[],int n) //按成绩降序排列并写入名次的函数{
}
fsearch(STU s[],int n) //按学生姓名查找学生信息的函数{
}
void main() //主函数
{
STU s[N];
int n,i;
while(1)
{
system("CLS");
printf("\n\n\n\n\t1.录入学生信息。

\n");
printf("\t2.输出学生信息。

\n");
printf("\t3.输出最高分学生信息。

\n");
printf("\t4.按成绩排序。

\n");
printf("\t5.按姓名查找。

\n");
printf("\t0.退出,\n");
scanf("%d",&i);
switch(i)
{
case 1:printf("请输入该班的人数:");
scanf("%d",&n);
fin(s,n);
break;
case 2:fout(s,n);
break;
case 3:fmax(s,n);
break;
case 4:fsort(s,n);
break;
case 5:fsearch(s,n);
break;
case 0:exit(0);
}
}
}
程序二:用链表实现
程序结构如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char num[11];
char name[9];
int score;
struct node *next;
}*head; //定义链表中结点的结构体类型,并声明头指针head
void fin(int n) //用于输入的函数
{
}
void fout() //将链表中的各数据进行显示
{
}
void fmax() //查找最高分学生信息的函数
{
}
void fsearch() //按姓名查找学生的信息
{
}
void fsort() //采用插入排序实现按学生的成绩降序排列
{
}
void main()
{
int n,i=1;
while(1)
{
system("CLS");
printf("\n\n\n\n\t1.录入学生信息。

\n");
printf("\t2.输出学生信息。

\n");
printf("\t3.输出最高分学生信息。

\n");
printf("\t4.按成绩排序。

\n");
printf("\t5.按姓名查找。

\n");
printf("\t0.退出。

\n");
scanf("%d",&i);
switch(i)
{
case 1:printf("请输入该班的人数:");
scanf("%d",&n);
fin(n);
break;
case 2:fout();
break;
case 3:fmax();
break;
case 4:fsort();
fout();
break;
case 5:fsearch();
break;
case 0:exit(0);
}
}
}
输出示例:
六、综合实验
学生考试结束后,要对某班一门课的考试信息进行分析,主要功能包括:
1.录入学生成绩;
2.查询学生成绩;
3.删除学生成绩;
4.插入学生成绩;
5.输出所有的学生成绩;
6.结束应用程序。

(本程序要求用链表实现)
输出示例:。

相关文档
最新文档