|
发表于 2023-9-23 21:38:25
|
显示全部楼层
这段代码无法执行是因为在输入元素的循环中,如果输入的元素数量超过了MaxSize,就会导致循环无法终止。因此,需要在输入元素的循环中添加一个判断,当输入的元素数量达到MaxSize时,就跳出循环。同时,在输入元素的循环中,每次成功读入一个元素时,需要将顺序表的长度加1。修改后的代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #define MaxSize 50
- typedef int ElemType;
- typedef struct SqList
- {
- ElemType data[MaxSize];
- int length;
- } SqList;
- void InitList(SqList *L)
- {
- L->length = 0;
- }
- int ListInsert(SqList *L, int i, ElemType e)
- {
- int j;
- if (i < 1 || i > L->length + 1 || L->length >= MaxSize)
- {
- return 0;
- }
- for (j = L->length - 1; j >= i - 1; j--)
- {
- L->data[j + 1] = L->data[j];
- }
- L->data[i - 1] = e;
- L->length++;
- return 1;
- }
- int ListDelete(SqList *L, int i)
- {
- int j;
- if (i < 1 || i > L->length)
- return 0;
- for (j = i; j < L->length; j++)
- L->data[j - 1] = L->data[j];
- L->length--;
- return 1;
- }
- int main()
- {
- SqList myList;
- InitList(&myList);
- printf("请输入元素值,以空格分隔:");
- for (int i = 0; i < MaxSize; i++)
- {
- if (scanf("%d", &myList.data[ i]) == 1)
- {
- myList.length++;
- if (myList.length == MaxSize)
- {
- break;
- }
- }
- }
- printf("顺序表中的元素值为:");
- for (int i = 0; i < myList.length; i++)
- {
- printf("%d ", myList.data[ i]);
- }
- printf("\n");
- if (ListInsert(&myList, 3, 67))
- printf("在第3个位置插入67成功\n");
- else
- printf("在第3个位置插入67失败\n");
- if (ListInsert(&myList, 9, 10))
- printf("在第9个位置插入10成功\n");
- else
- printf("在第9个位置插入10失败\n");
- printf("插入后的顺序表中的元素值为:");
- for (int i = 0; i < myList.length; i++)
- {
- printf("%d ", myList.data[ i]);
- }
- printf("\n");
- if (ListDelete(&myList, 6))
- printf("删除第6个数据元素成功\n");
- else
- printf("删除第6个数据元素失败\n");
- if (ListDelete(&myList, 8))
- printf("删除第8个数据元素成功\n");
- else
- printf("删除第8个数据元素失败\n");
- printf("删除后的顺序表中的元素值为:");
- for (int i = 0; i < myList.length; i++)
- {
- printf("%d ", myList.data[ i]);
- }
- printf("\n");
- system("pause");
- return 0;
- }
复制代码 |
|