顺序表出错
#include<stdio.h>//宏定义类型
#define LISTSIZE 100
typedef struct xx
{
int items[LISTSIZE];
int length;
}SqList;
//插入
int LIstInsert (SqList *L, int pos, int item)
{
//L为顺序表指针,pos为插入的位置,item为插入的元素
int i;
if (L->length >= LISTSIZE)
{
printf("顺序表已经满,无法进行插入操作!");
return 0;
}
if (pos <= 0 || pos > L->length + 1)
{
printf("出入的位置不合法,其取值范围应该是[1,length + 1]");
return 0;
}
for (i = L->length - 1; i >= pos - 1; i--)
{
L->items[i+1] = L->items[i];
}
L->items[pos-1] = item;
L->length++;
return 1;
}
//删除
int LIstDelete (SqList *L, int pos1, int *item1)
{
//L为顺序表的指针,pos为删除的位置,用于item返回被删除的元素
int i;
if (L->length == 0)
{
printf("顺序表为空,无法进行删除操作");
return 0;
}
if (pos1 < 1 || pos1 > L->length)
{
printf("删除位置不合法,取值范围应该是[1, length]");
return 0;
}
*item1 = L->items[pos1 - 1];
for (i = pos1; i < L->length; i++)
{
L->items[i-1] = L->items[i];
}
L->length--;
return 1;
}
//查找
int find (SqList *L, int item2)
{
int pos = 0;
if (L->length == 0)
{
printf("顺序表为空,无法进行查找操作");
return 0;
}
while (pos < L->length && L->items[pos] != item2) pos++;
if (pos < L->length)
return pos + 1;
else
return 0;
}
//主函数
int main(void)
{
int i, pos, item, pos1, item1, item2;
SqList L;
L.length = 10;
printf("请输入10个数");
for (i = 0; i < 10; i++)
{
scanf("%d", &L.items[i]);
}
//插入
printf("输入插入的位置,插入的元素:");
scanf("%d%d", &pos, &item);
if (!LIstInsert (&L, pos, item) )
printf("error");
printf("输出新的顺序表:\n");
for (i = 0; i < L.length; i++)
{
printf("%d ", L.items[i]);
}
printf("\n");
//删除
printf("请输入删除的位置:\n");
scanf("%d", &pos1);
if (LIstDelete (&L, pos1, &item1) != 1)
printf("error");
else
{
printf("被删除的元素:%d\n", item1);
printf("输出新的顺序表:\n");
for (i = 0; i < L.length; i++)
{
printf("%d ", L.items[i]);
}
printf("\n");
}
//查找
printf("请输入查找的元素:");
scanf("%d", &item2);
if (find (&L, item2) == 0)
printf("没有查找到元素item2\n");
else
printf("查找的元素位置为 %d\n", find (&L, item2));
return 0;
}