#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE
#define OK 1
#define ERROR 0
typedef struct{
int *elem;
int length;
int LiseSize;
}SqList;
void fuzhi(SqList *L)
{
int length;
printf("请给顺序表赋值:\n");
printf("你想要输入几个数据:\n");
scanf("%d",&length);
printf("请输入元素:\n");
for(int i=0;i<length;i++)
scanf("%d",&L->elem[i]);
L->length=length;
}
void InsertList(SqList *L,int i,int elem)
{
int k;
if((i<1)||(i>L->length+2))
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->length>=MAX-1)
{
printf("表已满,无法插入");
return(ERROR);
}
for(k=L->length;k>=i-1;k--)
L->elem[i-1]=e;
L->length++;
return(OK);
}
void DeleteList(SqList *L,int i)
{
for(int k=i;k<=L->length;k++)
L->elem[k-1]=L->elem[k];
L->length--;
}
void AlterElement(SqList *L,int elem,int i)
{
L->elem[i-1]=elem;
}
int SearchElement(SqList L,int elem)
{
int location;
for(int i=0;ilength;i++)
if(L->elem[i]==elem)
{
location=i+1;
return location;
}
return -1;
}
void PrintList(SqList L)
{
printf("操作完后的顺序表为:\n");
for(int i=0;ilength;i++)
printf("%d",L->elem[i]);
}
int main()
{
SqList L;
L.elem = (int)malloc(LISTSIZEsizeof(int));
L.LiseSize = LISTSIZE;
fuzhi(&L);
printf(&L);
printf("输入你要插入的数字位置和要插入的数据值:\n");
int insert_a,insert_b;
scanf("%d%d",&insert_a,&insert_b);
InsertList(&L,insert_a-1,insert_b);
printList(&L);
int delete;
printf("输入你要删除的数据位置:\n");
scanf("%d%",&delete);
Delete(&L,delete-1);
printf(&L);
int Alter_a,Alter_b;
scanf("%d%d",&Alter_a,&Alter_b);
AlterElement(&L,Alter_a,Alter_b);
printf(&L);
int saerch;
printf("输入你要查找的数据位置:\n");
scanf("%d",&search);
int index=SearchElement(&L,search);
if(index + 1)
printf("您要查找的数据位置为%d个\n",index);
else
printf("抱歉,您要查找的数据不存在\n");
}
把代码贴出来才可以帮上忙。
都已修改调试完善,修改处见注释位置,供参考:
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 50//修改
#define OK 1
#define ERROR 0
typedef struct{
int *elem;
int length;
int LiseSize;
}SqList;
void fuzhi(SqList *L)
{
int length;
printf("请给顺序表赋值:\n");
printf("你想要输入几个数据:");
scanf("%d",&length);
if (length > L->LiseSize){ //修改
printf("待输入元素个数大于表长度,无法赋值!\n");
return;
}
printf("请输入元素:\n");
for(int i=0;i<length;i++)
scanf("%d",&L->elem[i]);
L->length=length;
}
void InsertList(SqList *L,int i,int elem)
{
int k;
if((i < 1)||(i > L->length))//if((i<1)||(i>L->length+2))
{
printf("插入位置i值不合法\n");
return;//(ERROR);
}
if(L->length >= L->LiseSize)//if(L->length>=MAX-1)
{
printf("表已满,无法插入\n");
return;//(ERROR);
}
for(k=L->length;k > i - 1; k--)
L->elem[k] = L->elem[k-1];//修改
L->elem[i-1]=elem; //L->elem[i-1]=e;
L->length++;
return;//(OK);
}
void DeleteList(SqList *L,int i)
{
if((i < 1)||(i > L->length))//修改
{
printf("删除位置i值不合法\n");
return;
}
if(L->length <= 0) //修改
{
printf("表已空,无法删除\n");
return;
}
for(int k = i - 1;k < L->length - 1; k++)//修改
L->elem[k]=L->elem[k+1]; //修改
L->length--;
}
void AlterElement(SqList *L,int elem,int i)
{
if((i < 1)||(i > L->length))//修改
{
printf("修改位置i值不合法\n");
return;
}
L->elem[i-1]=elem;
}
int SearchElement(SqList* L,int elem)
{
//int location;修改
for(int i=0;i < L->length;i++)
if(L->elem[i] == elem)
//location=i+1;修改
return i+1; //location; 修改
return -1;
}
void PrintList(SqList* L)
{
printf("操作完后的顺序表为:\n");
for(int i=0;i < L->length;i++)
printf("%d ",L->elem[i]);
printf("\n");
}
int main()
{
SqList L;
L.elem = (int*)malloc(LISTSIZE*sizeof(int));
L.LiseSize = LISTSIZE;
L.length = 0; //修改
fuzhi(&L);
PrintList(&L); //printf(&L);
printf("输入你要插入的数字位置和要插入的数据值:");
int insert_a,insert_b;
scanf("%d%d",&insert_a,&insert_b);
InsertList(&L,insert_a,insert_b);
//InsertList(&L,insert_a-1,insert_b);
PrintList(&L); //printList(&L);
int Del; //delete;
printf("输入你要删除的数据位置:");
scanf("%d",&Del); //scanf("%d%",&delete);
DeleteList(&L,Del); // Delete(&L,delete-1);
PrintList(&L); // printf(&L);
int Alter_a,Alter_b;
printf("输入你要修改的目标值和数据位置:");//修改
scanf("%d%d",&Alter_a,&Alter_b);
AlterElement(&L,Alter_a,Alter_b);
PrintList(&L); //printf(&L);修改
int search; //saerch;
printf("输入你要查找的数据值:");
scanf("%d",&search);
int index = SearchElement(&L,search);
if(index > 0) //if(index + 1)
printf("您要查找的数据位置为%d个\n",index);
else
printf("抱歉,您要查找的数据不存在\n");
return 0;
}
报什么错啊,执行结果贴一下。
仅供参考
#include<stdio.h>
#include<stdlib.h>
typedef struct OderList
{
int data;
}List;
//初始化
void InitList(List* list, int x)
{
int i = 0;
for (; i < x; i++)
{
scanf("%d", &list[i].data);
}
}
//展示链表
ShowList(List* list, int x)
{
int i = 0;
for (; i < x; i++)
{
printf("%d ", list[i].data);
}
printf("\n");
}
//第一种增加
void InsertList(List* list, int data, int address, int* n)
{
//1,2,4,5,6 address = 2 data = 3
int i = 0;
(*n)++;//插入一个原有总数+1
if (address > *n && address < 0)
{
printf("坐标输入错误");
return;
}
//后移动数据
for (i = *n - 1; i >= address; i--)
{
list[i + 1].data = list[i].data;
}
list[address].data = data;
}
//第二种增加
void InsertTowList(List* list, int data, int* n)
{
int i = 0;
(*n)++;
//增加在末尾
list[*n-1].data = data;
}
//删除数据
void DeleteList(List* list, int data, int* n)
{
int i = 0;
//1,2,3,3,4,5,6 删除3
//1 2 4 5 6
for (; i < *n; i++)
{
if (list[i].data == data)
{
for (int j = i; j < *n - 1; j++)
{
list[j].data = list[j + 1].data;
}
(*n)--;
i--;
}
}
}
//删2
void DeleteTowList(List* list, int address, int* n)
{
int i = address;
if (address > *n && address < 0)
{
printf("坐标输入错误");
return;
}
// 1 2 3 3 4 5
for (; i < *n - 1 ; i++)
{
list[i].data = list[i + 1].data;
}
(*n)--;
}
//查找使用的是二分查找
void SearchList(List* list, int data, int n)
{
int left = 0; //左下标
int right = n - 1;//右下标
int flag = 0;
int mid = 0;
while (left <= right)
{
//1 3 4 5 6 9 10 11
//mid 3 le 4 7 11/2 mid 5
//mid 5 r 4 4
//
mid = (left + right) / 2;
if (data > list[mid].data)//大了
{
left = mid + 1;
}
else if (data < list[mid].data)//小了
{
right = mid - 1;
}
else
{
flag = 1;
printf("找到了,下标为:>%d\n", mid);
break;
}
}
if (!flag)
printf("找不到\n");
}
//一一遍历的查找
void SearcTowhList(List* list, int data, int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
if (list[i].data == data)
{
printf("找到了,下标为%d\n",i);
return;
}
}
printf("未找到\n");
return;
}
//修改
void Modify(List* list, int address, int data)
{
list[address].data = data;
}
//排序
void BobbleSort(List* list, int n)
{
int i = 0;
int j = 0;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (list[j].data < list[j+1].data)//升序
{
//交换
int tmp = list[j].data;
list[j].data = list[j + 1].data;
list[j + 1].data = tmp;
}
}
}
}
int main()
{
//不能用n因为每次插入一个,n会增大,那么空间会不够,可以开辟大点
List* list = (List*)malloc(sizeof(List*) * 50);
int n = 0;
printf("输入你链表的长度:>");
scanf("%d", &n);
printf("初始化链表\n");
InitList(list, n);//初始化顺序链表表
//增1 有下标
int i = 0;
int j = 0;
printf("请输入>:插入的数据 插入地址的下标\n");
scanf("%d%d", &j, &i);
//每插入一个数据,原有的数据会增大。
//如果你从0开始数的,这里就不用-1
InsertList(list, j, i - 1, &n);
ShowList(list, n);
//增2 无下标
printf("请输入要插入的数据:>");
scanf("%d", &j);
//增加后原有的个数会变大,所以传址调用
InsertTowList(list, j, &n);
ShowList(list, n);
//删除1,无下标,删除所有k
int k = 0;
printf("原有数据如下\n");
ShowList(list, n);//展示链表
printf("请输入要删除哪个数字\n");
scanf("%d", &k);
DeleteList(list, k, &n);
ShowList(list, n);
//删除2 有下标
printf("原有数据如下\n");
ShowList(list, n);//展示链表
printf("请输入要删除数据的下标\n");
scanf("%d", &k);
//如果你从0开始数的,这里就不用-1
DeleteTowList(list, k-1, &n);
ShowList(list, n);
//查找数据是否存在
//排序后可用二分查找,未排序,一一遍历
int m = 0;
printf("请输入要查找的数\n");
scanf("%d", &m);
//排序
//BobbleSort(list, n);
//排序后原有数据的下标不对应
//这里用二分查找
printf("排序后二分查找\n");
SearchList(list, m, n);
//这里是遍历排序查找
printf("遍历查找\n");
SearcTowhList(list, m, n);
//修改
printf("请输入要修改的数据的下标, 以及修改后的数据\n");
scanf("%d%d", &i,&m);
//如果你从0开始数的,这里就不用-1
Modify(list, i - 1,m);
ShowList(list, n);
free(list);
list = NULL;
return 0;
}