数据结构课程设计实验验优参考(附数据结构上机实验、上机考试代码)

计算机的几个专业的数据结构考试内容有所不一样,好像上机还是什么不太一样。软件工程那边的老师还要求学会C++读取文件,后面我也会附上读取文件的相关代码,其余的实验上机、上机考试代码等等在资料区下载即可。

里面含有你们期待的上机实验和上机考试的代码:(附题目)
上机考试还是有点东西的,每个人可能随机抽的五道题目不一样,或者顺序不一样,总题量可能十几道题,每个人随机抽五道。。。。。。
知道我资料区那些资料含金量的学弟学妹不用我解释了吧哈哈哈,先看看文件内容:
里面还有一些比较重要的程序,不过都是课程相关,不是考试就是实验相关,绝不拖泥带水,有需求去资料区下载吧!
在这里插入图片描述
上机自己实验部分:
在这里插入图片描述
上机自己考试部分:
在这里插入图片描述

先给三个报告参考一下如何验优:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、课程设计(综合实验)总结或结论

验优报告二
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.循环链表
  void creat(pointer &head)//创建链表
{
head = new Node;Node *p,*q;
	p=head;int i=1;
	while(i<=n)
	{q=new Node;p->next = q;
	q->data =i;q->next = NULL;
	p=q;i++;
	}
	p->next = head->next;//循环链表
}
void leave(pointer &head,int m)
{
	Node *s,*p,*q;s=head->next;p=head;
	while(s->next !=s)
	{int i=1;
		while(i<m)//找到第m个数
		{p=s;s=s->next;i++;}
		q=s;p->next = q->next;
		s=q->next;cout<<q->data;
		delete(q);//删除第m个数}
	cout<<s->data<<endl;//输出最后一个数
}
2.顺序结构
for(int j=0;j<n;j++)
	{	a[j]=j+1; }
int k=1;int i=-1;
while(k<=n)
{for(int j=0;j<m;)
	{i=(i+1)%n;
	 if(a[i]!=0)//跳过已出列的数的位置
		j++;}
	cout<<a[i];
a[i]=0;//出列位置的数记为0
k++;}

(4)实验结果
输入8和4。链表结构和顺序结构输出结果都为:48521376。

在这里插入图片描述

 Btree creat()//创建二叉树
{ int c;cin>>c;Btree T;
if(c==0)T=NULL;
else
{T = new Btnode;T->data =c;
T->Lchild = creat();T->Rchild  = creat();}
return T;}
void Preorder(Btnode *T)//先序遍历
{if(T)
	{cout<<T->data<<" ";
	Preorder(T->Lchild);
	Preorder(T->Rchild)}
}
void inorder(Btnode *T)//中序遍历
{if(T)
	{inorder(T->Lchild);
	cout<<T->data<<" ";
	inorder(T->Rchild);}
}
void postorder(Btnode *T)//后序遍历
{if(T)
	{postorder(T->Lchild);
	postorder(T->Rchild);
	cout<<T->data<<" ";}
}

(4)实验结果
输入1 2 3 4 0 0 0 0 0,先序遍历:1 2 3 4。中序遍历:4 3 2 1。后序遍历:4 3 2 1。

在这里插入图片描述
在这里插入图片描述

void build_adjlist(Adjlist& ga)//创建邻接表
{int n, e, i, j;EdgeNode *p, *q;cout << "请输入顶点数:";
	cin >> n;
	for (int m = 1; m <= n; m++)//初始化邻接表
	{ga[m].vertex = m;ga[m].link = NULL;}
	cout << "请输入边数:";cin >> e;
	for (int k = 0; k<e; k++)//读入顶点对
	{cout << "读入顶点对:";cin >> i;cin >> j;
		p = new struct EdgeNode;p->adjvex = j;p->next = ga[i].link;
		ga[i].link = p;
		q = new struct EdgeNode;q->adjvex = i;q->next = ga[j].link;
		ga[j].link = q;}}
深度优先遍历:
void dfs(Adjlist g, int v0, int visited[])
{//从v0出发深度优先遍历图g,g以邻接表为储存结构
	cout << v0;visited[v0] = 1;//标志v0已访问
	EdgeNode *p;p = new EdgeNode;p = g[v0].link;
	while (p != NULL)
	{if (visited[p->adjvex] == 0)
		{dfs(g, p->adjvex, visited);}
		else
			p = p->next;//回溯,找v0的下一个邻接点}}
广度优先遍历:
void bfs(Adjlist g, int v0, int visited[])
{int Q[MAX];int v;int f, r;//f,r分别为队列的头尾指针
visited[v0] = 1;cout << v0;EdgeNode *p;p = new EdgeNode;p = g[v0].link;
f = r = 0;
	do
	{while (p != NULL)
		{v = p->adjvex;
			if (visited[v] == 0)//若v未被访问,v入队 
			{r++;Q[r] = v;cout << v;visited[v] = 1;}
			p = p->next;//找某一个顶点的所有邻接点并进队}
		if (f != r)
		{f++;v = Q[f];p = g[v].link;}}
 while ((p != NULL) && (f != r));}

(4)实验结果
请输入顶点数:8;请输入边数:10;读入顶点对:1 2;读入顶点对:1 3;读入顶点对:2 4;读入顶点对:2 5;读入顶点对:3 6;读入顶点对:3 7;读入顶点对:4 8;读入顶点对:5 8;读入顶点对:6 8;读入顶点对:7 8;
深度优先遍历:13786524
广度优先遍历:13276548

在这里插入图片描述

3)程序实现
   电话号码的处理:
   int Hash(long k)
{while(k)
	{sum=sum+k%10;k=k/10;}
	m=sum%7;return m;}
  录入信息:
   void HashinsertChain(Link_list HST[],long key,string name,string address)
{n=Hash(key);
	if(HST[n]==NULL)//写入信息(顺序结构)
	{p=new node();p->key=key;p->name=name;p->address=address;p->next=NULL;
		HST[n]=p;}
	else if(HST[n]!=NULL)//查找
	{s=HST[n];
		while(s->next!=NULL&&s->key!=key)
			s=s->next;
		if(s->key==key)
		{cout<<s->name <<"已存在!"<<endl;
			return;}
		else//写入信息(解决冲突)写在链式结构中
		{p=new node();p->key=key;p->name=name;p->address=address;
p->next=NULL;s->next=p;}}}
查找:
void HashsearchChain(Link_list HST[],long key)//按照号码查找
{	n=Hash(key);
	q=HST[n];
	while(q!=NULL&&q->key!=key)
		q=q->next;
	if(q==NULL)
	cout<<"无此号码!"<<endl;
	else
		cout<<"姓名:"<<q->name<<"  电话:"<<q->key<<"  地址:"<<q->address<<endl;}

(4)实验结果
1.添加数据
2.查找数据
3.删除数据
****4.显示所有数据

请选择要进行操作:1
依次输入姓名 电话号码 地址:gdk 56789 sjz
输入0返回主菜单,输入其他任意键退出系统!
0

1.添加数据
2.查找数据
3.删除数据
****4.显示所有数据

请选择要进行操作:1
依次输入姓名 电话号码 地址:sbc 38690 bd
输入0返回主菜单,输入其他任意键退出系统!
0

1.添加数据
2.查找数据
3.删除数据
****4.显示所有数据

请选择要进行操作:4
姓名:gdk 电话:56789 地址:sjz
姓名:sbc 电话:38690 地址:bd
输入0返回主菜单,输入其他任意键退出系统!

三、课程设计(综合实验)总结或结论

验优报告三:(这个实验内容和前面两个有区别,老版了,懂得都懂,我就不多说了)

在这里插入图片描述

这个只补充一个实验:

在这里插入图片描述

void manager()
{
	char key;string num;int time;
	cin>>key;cin>>num;cin>>time;
	switch(key)
	{case'A'://到达
		{if(top<Max)//栈不满,进栈,即进入停车场
			{top++;stack[top].key = key;stack[top].num = num;
				stack[top].time = time;}
			else //栈满,在候车场等候,进队
			{r++;Q[r].key = key;Q[r].num = num;Q[r].time = time;}
			if((f-r)==0)//队空即进入了停车场
			{cout<<"进入停车场当前位置:"<<top<<endl;}
			else
				cout<<"进入候车场当前位置:"<<(r-f)<<endl;
			break;
		}
	case'D'://离开
		{int n=top;
			while (stack[n].num!=num&&n!=0)//判断停车场内有无此车辆
				n--;
			if(n==0)
			{cout<<"停车场内无此车辆"<<endl;}
			else
			{for(int i=n+1;i<=top;i++)//该车辆之后的车辆进入临时栈
				{stop++;s_stack[stop].key = stack[i].key;
					s_stack[stop].num = stack[i].num;
s_stack[stop].time=stack[i].time;}
				int hour1,hour2,minute1,minute2,t,money;//计算时长,计费
				hour1 = time/100;minute1=time%100;
				hour2 = stack[n].time/100;
				minute2 = stack[n].time%100;
				t = (hour1-hour2)*60+(minute1-minute2);
				if(t%60)
					money = (t/60+1)*10;
				else
					money = (t/60)*10;
				cout<<"停车时间:"<<t<<"分"<<"消费:"<<money<<endl;
				while(stop!=0)//临时栈中的车辆按照之前的顺序进入停车场栈
				{stack[n].key = s_stack[stop].key;
					stack[n].num = s_stack[stop].num;
					stack[n].time = s_stack[stop].time;
					n++;stop--;}
				if(f!=r)//队不空,队首进入停车场栈
				{f++;stack[top].key = Q[f].key;
					stack[top].num = Q[f].num;stack[top].time = Q[f].time;
					cout<<"车辆"<<stack[top].num<<"由候车场进入停车场,进入时间为:"<<stack[top].time<<endl;}
				else
					top--;}}
		break;
	case'P':cout<<"停车场车数为:"<<top<<endl;break;
	case'W':cout<<"候车场车数为:"<<r-f<<endl;break;
	default:cout<<"ERROR"<<endl;break}
	cout<<"是否继续操作?(Y/N)";
	char s;cin>>s;
	if(s=='N')
	{cout<<"欢迎下次使用";}
	if(s=='Y')
	{cout<<"输入A/D/P/W,车牌号,时间:";manager();}
}

在这里插入图片描述
笔者介绍:某智科卑微牛马,一项省级大创已结项,一项国家级大创和一项校级大创已成功立项,都交给小自己一届的学弟去做,参加的挑战杯项目在其余队友参加大创后也获得了省级优秀和国家级优秀结项。同时组织并担任了2022年挑战杯、两项互联网+、电子商务大赛、舞蹈机器人大赛、“创青春”青年创新创业大赛的队长,并参加过节能减排大赛、调研河北大赛、数学建模美赛、蓝桥杯省赛、机器人国赛等比赛若干,获得过舞蹈机器人一等、电子商务大赛二等、挑战杯三等、节能减排省一等、创新创业优秀个人、社会实践优秀个人等奖项。

程序下载说明:作者所有的实验、课设验收基本都是优,也不缺这几米,不过不想自己的文章或者作品烂大街,想留点门槛,应该是几米这样子,作品都是保证高质量的,给有需要的学弟学妹们学习,大部分还是免费的,因为一些大型的文件不好上传,故放在付费资料区下载,真的非常良心!!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华电第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值