点击目录传送ฅʕ•̫͡•ʔฅ
记录
数据结构练习题
实验1 多个数的求和、平均、最大值、最小值
题目:通过键盘输入整数,直到遇到一个负数为止,该负数不考虑在内,求所输整数的合、平均值、最大值和最小值,并在屏幕上输出。
#include<iostream>
#include<stdio.h> //需要时直接将cout改成printf即可
using namespace std;
int main()
{
//通过键盘输入整数,直到遇到一个负数为止,该负数不考虑在内
//定义一个数组保存输入的数据,计数i
int i=0,num,a[1024];
do{
cout << "请输入第"<< i+1 <<"整数:(本次输入完成后请按回车)" << endl;
cin >> num;
if(num>=0) a[i]=num;
i++;
if(num<0){
cout << "你输入了一个负数,终止输入!" << endl;
}
}while(num>=0);
//求所输整数的合、平均值、最大值和最小值
int n=i-1; //数组长度,第i个是个负数,不计入数组,而且数组下标又是从零开始的
int sum=0,avg=0,max=0,min=a[0];
//输出一下看看
for(i=0;i<n;i++){
cout << a[i] << " ";
}
cout << endl;
//接下来是用一个for循环求出sum、max、min
for(i=0;i<n;i++){
if(a[i]>=max){
max=a[i];
}
if(a[i]<=min){
min=a[i];
}
sum+=a[i];
}
avg=sum/n;
cout << "sum:" << sum << endl;
cout << "avg:" << avg << endl;
cout << "max:" << max << endl;
cout << "min:" << min << endl;
return 0;
}
运行图示:
实验2 集合的交、并差
实验目的:通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。
实验内容:通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
//通过键盘,分别输入两个数据元素类型为正整数的集合A和B,
//以负数输入为结束条件,输出两个集合的交、并、差。
//集合元素输入时,要有检查元素重复的功能。
//集合AB可以用数组ab表示
int a[1024],b[1024];
//负数结束
int i=0,j=0,insp=0;
int anum=0,bnum=0;
cout << "结束条件为输入负数." << endl;
do{
cout << "请输入(正整数)a[" << i << "](输入后请按回车):";
cin >> anum;
//检查元素是否重复
for(insp=0;insp<i;insp++){
if(anum==a[insp]){
cout << "该元素与a[" << insp << "]重复!" << endl;
cout << "***已返回,请重新输入!***" << endl;
i-=1;
}
}
if(anum>0) a[i]=anum;
i++;
if(anum<0){
cout << "你输入了一个负数,终止输入!" << endl;
}
}while(anum>0);
int alength=i-1; //a的长度
do{
cout << "请输入(正整数)b[" << j << "](输入后请按回车):";
cin >> bnum;
//检查元素是否重复
for(insp=0;insp<j;insp++){
if(bnum==b[insp]){
cout << "该元素与b[" << insp << "]重复!" << endl;
cout << "***已返回,请重新输入!***" << endl;
j-=1;
}
}
if(bnum>0) b[j]=bnum;
j++;
if(bnum<0){
cout << "你输入了一个负数,终止输入!" << endl;
}
}while(bnum>0);
int blength=j-1; //b的长度
//输出一下看看
cout << "数组a为:" << endl;
for(i=0;i<alength;i++){
cout << a[i] << " ";
}
cout << endl;
cout << "数组b为:" << endl;
for(j=0;j<blength;j++){
cout << b[j] << " ";
}
cout << endl;
//求交集,用数组c表示,一个一个比较找相等的
int c[1024];
int k=0; //数组下标
for(i=0;i<alength;i++){
cout << endl;
cout << "运算ing..." << endl;
for(j=0;j<blength;j++){
if(a[i]==b[j]){
c[k]=a[i];
k++;
cout << "发现:" << c[k-1] << " !";
}
else cout << "..." << " ";
}
}
cout << endl;
int clength=k;
cout << "交集为:";
for(k=0;k<clength;k++){
cout << c[k] << " ";
}
cout << endl;
//求差集,用数组d表示,找不相等的... 交集之外的 需要遍历AB数组
int d[1024];
int flag=0; //需要一个标记
int dk=0; //下标
for(i=0;i<alength;i++){
cout << endl;
cout << "运算ing..." << endl;
for(k=0;k<clength;k++){
if(a[i]==c[k]){
flag=1;
}
}
if(flag==0){
d[dk]=a[i];
dk++;
cout << "发现:" << d[dk-1] << " !" << endl;
}
}
flag=0;
for(j=0;j<blength;j++){
cout << endl;
cout << "运算ing..." << endl;
for(k=0;k<clength;k++){
if(b[j]==c[k]){
flag=1;
}
}
if(flag==0){
d[dk]=b[j];
dk++;
cout << "发现:" << d[dk-1] << " !" << endl;
}
}
int dlength=dk;
cout << "差集为:";
for(dk=0;dk<dlength;dk++){
cout << d[dk] << " ";
}
cout << endl;
//求并集,即交集差集之和
cout << "并集为:";
for(k=0;k<clength;k++){
cout << c[k] << " ";
}
for(dk=0;dk<dlength;dk++){
cout << d[dk] << " ";
}
cout << endl;
return 0;
}
运行图示:
实验3 顺序表的基本操作
实验目的:通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。
实验内容:编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编成一个完整的小软件。
初始化一个顺序表;
插入数据(位置, 数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入3个数据(1,20)、(1,10)、(3,30);
显示顺序表中的数据
判空
顺序表长度
获取指定位置元素
定位
求直接前驱
求直接后继
删除
清空操作后再测长度,判断是否为空;
销毁顺序表
测试合并操作
#include<iostream>
#include<cstdlib>
using namespace std;
//线性表的基本操作,最好用菜单形式