数据结构顺序表的c语言代码实现,主函数测试时插入和删除操作不能得到预期结果

#include <stdio.h>
#define Maxsize 50
#define FALSE 0
#define TRUE 1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType data[Maxsize];
int length;
}SqList;
Status LocateElem(SqList L,int e){//按值查找
int i;
if(L.length==0)
return FALSE;
for(i=0;i<L.length;i++){
if(L.data[i]==e)
return i+1;
}
return FALSE;
}
Status Insert(SqList L,int i,int e){//插入操作
int j;
if(L.length==Maxsize)
return FALSE;
if(i<1||i>L.length+1)
return FALSE;
for(j=L.length-1;j>=i-1;j--)
L.data[j+1]=L.data[j];
L.data[i-1]=e;
L.length++;
return TRUE ;
}
Status Delete(SqList L,int i){//删除操作
int j;
if(L.length==0)
return FALSE;
for(j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
return TRUE;
}
SqList CreateList(SqList L){
int i;
L.length=30;
for(i=0;i<L.length;i++){
L.data[i]=i+1;
}
return L;
}
void printSqList(SqList L){
int i;
for(i=0;i<L.length;i++){
printf("顺序表第%d个元素值为%d\n",i+1,L.data[i]);
}
printf("\n\n");
}

void main(){
int k;
int e; //待查元素
int insertData;//待插元素
int insert_location,delete_location;//插入位置及删除位置
int isInserted,isDeleted;//判断是否插入或删除成功
SqList L=CreateList(L);
printSqList(L);

printf("请输入您要查找的值:");
scanf("%d",&e);
k=LocateElem(L,e);
printf("您要查找的值在顺序表第%d个\n",k);
printf("\n\n");

printf("请输入您要插入的位置:");
scanf("%d",&insert_location);
printf("\n");
printf("请输入您要插入的值:");
scanf("%d",&insertData);

isInserted=Insert(L,insert_location,insertData);
if(isInserted){
printf("%d",L.data[insert_location-1]);
}
printf("\n\n");

printf("请输入您要删除的位置:");
scanf("%d",&delete_location);
printf("\n");
isDeleted=Delete(L,delete_location);
if(isDeleted){
printf("\n");
printSqList(L);
}

}

你的代码中的插入和删除操作根本就无法实现,应为函数无法修改main()函数中传入的实参变量的,把形参改成指针才行

代码改成如下:

#include <stdio.h>
#define Maxsize 50
#define FALSE 0
#define TRUE 1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType data[Maxsize];
int length;
}SqList;
Status LocateElem(SqList L,int e){//按值查找
int i;
if(L.length==0)
return FALSE;
for(i=0;i<L.length;i++){
if(L.data[i]==e)
return i+1;
}
return FALSE;
}
Status Insert(SqList *L,int i,int e){//插入操作 //修改成指针
int j;
if(L->length==Maxsize) //把 .改成 ->
return FALSE;
if(i<1||i>L->length+1)
return FALSE;
for(j=L->length-1;j>=i-1;j--) //把 .改成 ->
L->data[j+1]=L->data[j];//把 .改成 ->
L->data[i-1]=e;//把 .改成 ->
L->length++;//把 .改成 ->
return TRUE ;
}
Status Delete(SqList * L,int i){//删除操作 //修改成指针
int j;
if(L->length==0)//把 .改成 ->
return FALSE;
for(j=i;j<L->length;j++){//把 .改成 ->
L->data[j-1]=L->data[j];//把 .改成 ->
}
L->length--;//把 .改成 ->
return TRUE;
}
SqList CreateList(SqList L){
int i;
L.length=30;
for(i=0;i<L.length;i++){
L.data[i]=i+1;
}
return L;
}
void printSqList(SqList L){
int i;
for(i=0;i<L.length;i++){
printf("顺序表第%d个元素值为%d\n",i+1,L.data[i]);
}
printf("\n\n");
}
void main(){
int k;
int e;        //待查元素
int insertData;//待插元素
int insert_location,delete_location;//插入位置及删除位置
int isInserted,isDeleted;//判断是否插入或删除成功
SqList L=CreateList(L);
printSqList(L);
printf("请输入您要查找的值:");
scanf("%d",&e);
k=LocateElem(L,e);
printf("您要查找的值在顺序表第%d个\n",k);
printf("\n\n");
printf("请输入您要插入的位置:");
scanf("%d",&insert_location);
printf("\n");
printf("请输入您要插入的值:");
scanf("%d",&insertData);
isInserted=Insert(&L,insert_location,insertData);
if(isInserted){
printf("%d",L.data[insert_location-1]);
}
printf("\n\n");
printf("请输入您要删除的位置:");
scanf("%d",&delete_location);
printf("\n");
isDeleted=Delete(&L,delete_location);
if(isDeleted){
printf("\n");
printSqList(L);
}
}

如果是C++可以把函数变成引用,那更简单

温馨提示:答案为网友推荐,仅供参考
相似回答