【理解】数据结构实验题

这篇博客记录了数据结构实验中的关键内容,包括多个数的求和、平均、最大值、最小值的计算,集合的交、并、差操作,顺序表的基本操作如插入、删除,以及链表和栈、队列的实验。作者强调了理解顺序线性表的重要性,并提供了部分代码和实验结果。
摘要由CSDN通过智能技术生成

记录

数据结构练习题

实验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;

//线性表的基本操作,最好用菜单形式
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值