王道数据结构课后代码题(可直接运行,不断更新)

王道数据结构课后代码题(可直接运⾏,不断更新)
题⽬⽬录
下⾯是22考研王道数据结构书上,课后习题所遇到的代码题,可以字节运⾏的,哈哈哈做个记录,可能算法不够优秀,⼀点点更新⼀点点进步吧,嘻嘻嘻!!
1、从线性表删除最⼩元素,并将最后⼀个值赋值
/**
* 从顺序表中删除具有最⼩的元素(假设唯⼀)并由函数返回被删除元素的值,
* 空出的位置由最后⼀个元素填补,若顺序表为空,则显⽰出错信息并退出运⾏
* @return
*/
#include"bits/stdc++.h"
using namespace std;
#define Max 50
struct SqList {
int a[Max]{2,3,4,6,7,1,8,9};
int length =8;
};
bool listdelete(SqList &s,int&ele){
if(s.length ==0){
return false;
}
int minn = s.a[0];
int flag =0;
for(int i =0; i < s.length;++i){
if(s.a[i]< minn){
minn = s.a[i];
flag = i;
}
}
ele = s.a[flag];
s.a[flag]= s.a[s.length -1];
return true;
}
int main(){
SqList s;
cout <<"原先数组"<< endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
int k =0;
if(listdelete(s, k)){
cout <<"最⼩元素k="<< k << endl;
cout <<"修改后的线性表为:"<< endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
}else{
cout <<"错误"<< endl;
}
return0;
}
输出结果:
2、逆置线性表
/**
* 逆置线性表,使空间复杂度为 O(1)
* @return
*/
#include"bits/stdc++.h"
using namespace std;
#define Max 50
struct SqList {
int a[Max]{2,3,4,6,7,1,8,9};
int length =8;
};
void reverse(SqList &s){
for(int i =0; i <s.length /2; i++){
int v = s.a[i];
s.a[i]= s.a[s.length - i -1];
FFU净化单元s.a[s.length - i -1]= v;
}
}
int main(){
SqList s;
cout <<"原先数组"<< endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
reverse(s);
cout <<"逆置后数组"<< endl;
for(int i =0; i < s.length;++i){挂壁式太阳能热水器
cout << s.a[i]<<" ";
}
cout << endl;
return0;
}
输出结果:
3、删除线性表所有值为x的元素
* 长度为n的顺序表,删除线性表所有值为x的元素,使得时间复杂度为O(n),空间复杂度为O(1) */
#define Max 50
struct SqList {
int a[Max]{2,3,4,6,1,1,8,9};
int length =8;
};
void deleteList(SqList &L,int x){
家庭视频电话
int k =0;//⽤来记录总共有⼏个x
for(int i =0; i < L.length;++i){
if(L.a[i]== x){
k++;
}else{
L.a[i - k]= L.a[i];
}
}
L.length = L.length - k;
}
int main(){
SqList s;
cout <<"原先数组"<< endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
deleteList(s,1);
cout <<"修改后数组"<< endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
return0;
}
输出结果:
4、删除线性表值在s和t之间的元素(包含s和t)
* 删除线性表中值在s与t之间的元素(s<t),s和t不合理或者顺序表为空则显⽰出错信息并退出运⾏ */
#define Max 50
struct SqList {
int a[Max]{1,2,3,4,4,4,6,7,8,9};
int length =10;
};
bool deleteList(SqList &L,int s,int v){
if(s >= v || L.length ==0)return false;
//ss是第⼀个⼤于s的值的下标
//vv是第⼀个⼤于v的值的下标
int ss =0, vv =0;
bool flag =false;
for(int i =0; i < L.length;++i){
if(L.a[i]>= s){
ss = i;
flag =true;
break;
}
}
if(!flag){return false;}
for(int i = ss; i < L.length;++i){
if(L.a[i]> v){
vv = i;
break;
}else{
vv = L.length;
}
}
int s1 = ss, v1 = vv;
for(int j = vv; j < L.length; j++){
L.a[ss]= L.a[j];
ss++;
}
L.length = L.length -(v1 - s1);
return true;
}
int main(){
SqList s;
cout <<"原先数组"<< s.length << endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
铠装铂热电阻cout << endl;
if(!deleteList(s,1,5)){ cout <<"错误"<< endl;}
cout <<"修改后数组"<< s.length << endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
return0;
}
运⾏结果:
5、略
6、从有序表中删除重复元素,使表中所有元素值均不相同
#include"bits/stdc++.h"
using namespace std;
/**
* 删除线性表中值重复的元素
*/
织物密度镜#define Max 50
struct SqList {
int a[Max]{1,2,2,4,4,4,6,7,8,9};
int length =10;
};
bool deleteRepeat(SqList &L){
int difCount =1;//⽤来记录有⼏个不同的数字
for(int i =1; i < L.length;++i){
if(L.a[i -1]!= L.a[i]){
//如果前⾯⼀个元素值和当前不同,difCount++
//然后将当前位置的值移动到
L.a[difCount]= L.a[i];
微型电风扇difCount++;
}
}
L.length = difCount;
}
int main(){
SqList s;
cout <<"原先数组"<< s.length << endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
deleteRepeat(s);
cout <<"修改后数组"<< s.length << endl;
for(int i =0; i < s.length;++i){
cout << s.a[i]<<" ";
}
cout << endl;
return0;
}
运⾏结果:
7、将两个有序顺序表合并成⼀个新的有序表,并有函数返回有序顺序表

本文发布于:2024-09-23 01:18:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/166621.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:元素   删除   顺序   线性表   代码   位置   数据结构   有序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议