计算机的几个专业的数据结构考试内容有所不一样,好像上机还是什么不太一样。软件工程那边的老师还要求学会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年挑战杯、两项互联网+、电子商务大赛、舞蹈机器人大赛、“创青春”青年创新创业大赛的队长,并参加过节能减排大赛、调研河北大赛、数学建模美赛、蓝桥杯省赛、机器人国赛等比赛若干,获得过舞蹈机器人一等、电子商务大赛二等、挑战杯三等、节能减排省一等、创新创业优秀个人、社会实践优秀个人等奖项。
程序下载说明:作者所有的实验、课设验收基本都是优,也不缺这几米,不过不想自己的文章或者作品烂大街,想留点门槛,应该是几米这样子,作品都是保证高质量的,给有需要的学弟学妹们学习,大部分还是免费的,因为一些大型的文件不好上传,故放在付费资料区下载,真的非常良心!!