保存一下学习阶段的代码方便复习,大佬可绕路
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
typedef struct
{
int *elem;
int size;// 分配的顺序表存储空间
int length;//顺序表当前长度
}SqList;
//初始化顺序表
SqList InitList(SqList L)
{
L.elem = (int*)malloc(SIZE * sizeof(int));//动态分配空间
if(!L.elem)
exit(0);
L.size = SIZE;
L.length = 0;
return L;
}
SqList DisplaySqList(SqList L, int len)
{
for(int i = 0; i < len; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
}
//插入新元素到第i个位置
SqList SqListInsert(SqList L, int i, int e)
{
//L.elem = (int*)malloc((SIZE+1) * sizeof(int)); ->为什么写了这一行,插入值之后,除了插入的元素其他值都变随机值了???
//懂了!!在这个函数里又给L新开辟了空间,所以之前的值都没了!!!
if(i < 1 || i > L.length + 1) {
printf("插入位置不正确");
exit(0);
}
if(L.length == SIZE) {
printf("存储空间已满");
exit(0);
}
for(int j = L.length - 1; j >= i - 1; j--)//从最后一个元素,依次往后移动,
{
L.elem[j+1] = L.elem[j];//元素后移
}
L.elem[i-1] = e;
L.length++;
return L;
}
SqList SqListDel(SqList L, int i)
{
if(i < 1 || i > L.length) {
printf("删除位置不正确");
exit(0);
}
for(int j = i - 1; j <= L.length - i; j++) {
L.elem[j] = L.elem[j+1];//删除的第i个位置后面的元素依次向前移动
}
L.length--;
return L;
}
int main()
{
SqList L;
L = InitList(L);
int len;
printf("输入顺序表的长度:");
scanf("%d", &len);
for(int i = 1; i <= len; i++)//给顺序表赋值
{
L.elem[i-1] = i;
L.length++;
}
DisplaySqList(L, len);
int i, e;
printf("请输入要插入的位置和值:");
scanf("%d %d", &i, &e);
L = SqListInsert(L, i, e);
DisplaySqList(L, L.length);
printf("请输入要删除的位置:");
scanf("%d", &i);
L = SqListDel(L, i);
DisplaySqList(L, L.length);
return 0;
}