数据结构实验顺序表
具体代码
具体代码
#include
<bits
/stdc
++.h
>
#include
<stdio
.h
>
#include
<iostream
>
using namespace std
;
int
LC = 0;
typedef int listMax
;
typedef int status
;
typedef struct
{
listMax
*elem
;
int length
;
}List
,*L;
List La
;
List La1
;
List Lb
;
List Lb1
;
List Lc
;
status
initlist(int n
,List
&L){
L.elem
= new listMax[n
];
L.length
= n
;
if (L.elem
== NULL) exit (0);
return 1;
}
void end(){
printf("本次实验结束!\n下次再见!");
}
status
listvalue(int t
,List
&L) {
int cut
= 1;
int c
;
for(int i
= 0;i
< t
;i
++){
cin
>>c
;
L.elem
[i
]=c
;
cut
++;
}
if (cut
== t
) exit(0);
return 1;
}
void listinprint(List
L){
for(int i
= 0;i
< L.length
;i
++){
printf("%d ",L.elem
[i
]);
}
printf("\n\n");
}
void pig(){
printf("猪头!看清楚再输入啊!\n");
}
status
listinsert(List
&L,int g
){
int i
,e
;
printf("请输入您要插入的位置!");
while(1){
cin
>>i
;
if(1 <= i
&& i
<= L.length
){
printf("请输入您要插入的元素!");
cin
>>e
;
for(int j
= L.length
-1;j
>= i
-1;j
--)
L.elem
[j
+1] = L.elem
[j
];
L.elem
[i
-1] = e
;
L.length
++;
printf("已完成操作:在第%d个位置插入%d!\n",i
,e
);
printf("新的顺序表为:");
if (g
== 1) listinprint(La
);
else if (g
== 2) listinprint(Lb
);
else listinprint(Lc
);
break;
}else pig();
}
return 1;
}
status
listdelet(List
&L,int g
){
int i
,r
;
int x
= 0;
printf("请输入您要删除的元素!");
while(1){
cin
>>i
;
for(int j
= 0;j
<= L.length
; j
++){
if(i
== L.elem
[j
]) {
r
= j
;
x
++;
}
}
if (x
) break;
else pig();
}
for(int j
= r
;j
<= L.length
-1;j
++)
L.elem
[j
]=L.elem
[j
+1];
L.length
--;
printf("已完成操作:删除元素%d\n",i
);
printf("新的顺序表为:");
if(g
== 1) listinprint(La
);
else if (g
== 2) listinprint(Lb
);
else listinprint(Lc
);
return 1;
}
void inverse(List
&L,int g
){
int e
;
for(int i
= 0;i
< (L.length
/2);i
++){
e
= L.elem
[L.length
-1-i
];
L.elem
[L.length
-1-i
] = L.elem
[i
];
L.elem
[i
] = e
;
}
printf("已完成操作:反转顺序表!\n");
printf("新的顺序表为:");
if(g
== 1) listinprint(La
);
else if(g
== 2) listinprint(Lb
);
else listinprint(Lc
);
}
void sort(List
&L){
int e
;
for(int i
= 0;i
< L.length
;i
++){
for(int j
= i
;j
< L.length
;j
++){
if(L.elem
[i
] > L.elem
[j
]){
e
= L.elem
[j
];
L.elem
[j
] = L.elem
[i
];
L.elem
[i
] = e
;
}
}
}
}
void MergeList(List La
,List Lb
,List
&Lc
){
Lc
.length
= La
.length
+ Lb
.length
;
Lc
.elem
= new listMax[La
.length
+ Lb
.length
];
for(int len
=0,i
=0,j
=0;len
<Lc
.length
;len
++){
if(i
==La
.length
){
Lc
.elem
[len
]=Lb
.elem
[j
];
j
++;
continue;
}
if(j
==Lb
.length
){
Lc
.elem
[len
]=La
.elem
[i
];
i
++;
continue;
}
if(La
.elem
[i
]>Lb
.elem
[j
]){
Lc
.elem
[len
]=Lb
.elem
[j
];
j
++;
}else{
Lc
.elem
[len
]=La
.elem
[i
];
i
++;
}
}
printf("操作成功!顺序表La与Lb合并完成!\n");
printf("合并后的顺序表Lc为:\n");
listinprint(Lc
);
LC++;
}
int
select(int p
){
int g
;
printf("请输入您要操作的数组前的序号!\n");
printf("(1)La数组\n");
printf("(2)Lb数组\n");
if (LC == 1) printf("(3)Lc数组\n");
while(1){
cin
>>g
;
if(g
== 1 || g
== 2){
if(p
== 0){
if(g
== 1) listinprint(La
);
else if(g
== 2) listinprint(Lb
);
}else if(p
== 1){
if(g
== 1) listinsert(La
,g
);
else if(g
== 2) listinsert(Lb
,g
);
}
else if(p
== 2){
if(g
== 1) listdelet(La
,g
);
else if(g
== 2) listdelet(Lb
,g
);
}
else if(p
== 3){
if(g
== 1) inverse(La
,g
);
else if(g
== 2) inverse(Lb
,g
);
}
}else if(g
== 3){
if(LC){
switch(p
){
case 0:listinprint(Lc
);
break;
case 1: listinsert(Lc
,g
);
break;
case 2: listdelet(Lc
,g
);
break;
case 3: inverse(Lc
,g
);
break;
}
}else pig();
}
else pig();
break;
}
return 1;
}
int
menu(){
int d
=0;
printf("选择您想要执行的后续操作!\n");
printf("输入(0)执行输出算法!\n");
printf("输入(1)执行插入算法!\n");
printf("输入(2)执行删除算法!\n");
printf("输入(3)执行反转算法!\n");
printf("输入(4)执行合并算法!\n");
printf("输入(5)退出本程序!\n");
while(1){
cin
>>d
;
if(d
== 0){
select(0);
menu();
}else if(d
== 1) {
select(1);
menu();
}
else if(d
== 2){
select(2);
menu();
}
else if(d
== 3){
select(3);
menu();
}
else if(d
== 4){
La1
= La
;
Lb1
= Lb
;
sort(La1
);
sort(Lb1
);
MergeList(La1
,Lb1
,Lc
);
menu();
}
else if(d
== 5){
end();
break;
}
else pig();
}
return 0;
}
int
main(){
int n
,m
,f
;
printf("数据结构实验一:顺序表的基本操作\n");
printf("请输入顺序表La的长度\n");
cin
>>n
;
bool t1
= initlist(n
,La
);
if(t1
) printf("顺序表La已创建,长度为%d\n",n
);
printf("请输入%d个正整数以存放在顺序表La中\n",n
);
f
= listvalue(n
,La
);
if(f
) printf("成功为顺序表La赋值\n");
printf("顺序表La的值为\n");
listinprint(La
);
printf("请输入顺序表Lb的长度\n");
cin
>>m
;
bool t2
= initlist(m
,Lb
);
if(t2
) printf("顺序表Lb已创建,长度为%d\n",m
);
printf("请输入%d个正整数以存放在顺序表Lb中\n",m
);
f
= listvalue(m
,Lb
);
if(f
) printf("成功为顺序表Lb赋值\n");
printf("顺序表Lb的值为\n");
listinprint(Lb
);
printf("您已成功创建两个顺序表,解锁高级关卡!\n");
menu();
return 0;
}
转载请注明原文地址: https://lol.8miu.com/read-19429.html