#include<stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
//初始化静态顺序表
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++){
L.data[i]=0;
}
L.length=0;
}
//创建静态顺序表
void CreateList(SqList &L){
int num;
printf("请输入要往顺序表中加入的整数(输入9999退出):");
while(scanf("%d", &num) == 1 && num != 9999 && L.length < MaxSize)
{
L.data[L.length++] = num;
printf("顺序表的长度是:%d\n", L.length);
printf("剩余位置的数量:%d\n", MaxSize - L.length);
printf("请输入要往顺序表中加入的整数(输入9999退出):");
}
}
//遍历静态顺序表
void TravelList(SqList &L){
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
//求表长
void length(SqList L){
printf("%d\n",L.length);
}
//按值查找操作
void Locate(SqList L,int e){
int count=0;
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
printf("%d出现在顺序表的第%d个位置!\n",e,(i+1));
count+=1;
}
}
if(count==0)
printf("在顺序表中没有找到元素%d\n",e);
}
//按位查找操作
int GetElem(SqList L,int i){
if(i<0||i>L.length)
return -1;
else
return L.data[i-1];
}
//插入操作(在L中的第i个位置插入指定元素e)
void ListInsert(SqList &L,int i,int e){
if(i<=0||i>L.length+1){
printf("插入的位置不合法!");
return;
}
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;//思路简单记忆:先从后往前往后挪,直到要插入位置的下一个位置,然后赋值该位置
L.length++;
}
//删除操作删除表L中第i个位置的元素,并且用e返回删除元素的值
bool ListDelete(SqList &L,int i,int &e){
if(i<=0||i>L.length){
return 0;
}
e=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}//思路简记:先把值赋给e然后从前往后往前挪
L.length-=1;
return 1;
}
//判断静态顺序表时候空
bool Empty(SqList L){
if(L.length)
return 1;
else
return 0;
}
//销毁静态顺序表
void Destory(SqList &L){
for(int i=0;i<L.length;i++){
L.data[i]==0;
}
L.length=0;
printf("静态顺序表已经销毁!");
}
int main() {
SqList L;
int choice;
do {
printf("\n请选择操作:\n");
printf("1. 初始化表\n");
printf("2. 创建表\n");
printf("3. 遍历表\n");
printf("4. 获取长度\n");
printf("5. 按值查找\n");
printf("6. 按位查找\n");
printf("7. 按位插入\n");
printf("8. 按位删除\n");
printf("9. 判空\n");
printf("10. 销毁表\n");
printf("11. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
InitList(L);
printf("列表已初始化。\n");
break;
case 2:
CreateList(L);
printf("列表已创建。\n");
break;
case 3:
printf("遍历顺序表得到的结果是:");
TravelList(L);
break;
case 4:
printf("表长是:");
length(L);
break;
case 5: {
int e;
printf("按值查找请输入:");
scanf("%d", &e);
Locate(L, e);
break;
}
case 6: {
int i;
printf("按位查找请输入:");
scanf("%d",&i);
printf("顺序表中第%d个元素是%d(如果是-1代表没找到)",i,GetElem(L,i));
break;
}
case 7: {
int i,e;
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入元素值:");
scanf("%d",&e);
ListInsert(L,i,e);
printf("插入后的顺序表是:");
TravelList(L);
printf("插入后的顺序表的表长是:");
length(L);
break;
}
case 8:{
int i,e;
printf("请输入要删除元素的位置:");
scanf("%d",&i);
if(ListDelete(L,i,e)){
printf("删除第%d个位置的元素成功!\n",i);
printf("删除的元素是:%d",e);
printf("删除后的顺序表是:");
TravelList(L);
printf("删除后的顺序表的表长是:");
length(L);
}
else
printf("输入的删除位置不合法!");
break;
}
case 9:{
if(Empty(L))
printf("静态顺序表非空!");
else
printf("静态顺序表空了!");
break;
}
case 10:{
Destory(L);
break;
}
case 11:
printf("程序退出。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
}
} while (choice != 11);
return 0;
}
2025王道考研13页2.1.2参考代码(静态数组版本)
于 2024-03-28 20:56:36 首次发布