// 使用malloc函数为结构体申请动态内存空间
#include <stdio.h>
#include <stdlib.h>
#define MAX 128
typedef struct
{
int data[MAX];
int length;
}SqList;
void getElem(SqList *L, int i, int **sp)
{
if (L->length == 0 || i < 1 || i > L->length)
{
printf("Call failure!");
}
*sp = &(L->data[i-1]);
}
void listInsert(SqList *L, int i, int num)
{
// 错误检查
if (L->length == MAX) // 顺序表已满
{
printf("顺序表已满,无法插入新元素!");
}
if (i <= 0 || i > L->length+1) // 注意:L=length+1是允许的,即新增元素在最后
{
printf("元素插入位置超出范围!");
}
// 如果不是插入最后一个位置,元素后移,为新元素空出一个位置
if (i <= L->length)
{
for (int k = L->length-1; k >= i-1; k--)
{
L->data[k+1] = L->data[k];
}
}
L->data[i-1] = num;
L->length++;
}
// 初始条件:顺序线性表已存在
// 操作结果:在L中第i个位置插入新的元素e,L的长度加1
int delElem(SqList *L, int i)
{
if (L->length == 0 || i < 1 || i > L->length)
{
printf("Call failure!");
}
// 删除只需要往前移动覆盖就可以
// 将删除的值返回
int del_elem;
del_elem = L->data[i-1];
for (int k = i-1; k < L->length - 1; k++)
{
L->data[k] = L->data[k+1];
}
L->length--;
return del_elem;
}
void printList(SqList *L)
{
for (int i = 0; i < L->length; i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}
int main()
{
SqList *sqlist;// 定义结构体指针
sqlist = (SqList *)malloc(sizeof(SqList)); // 申请动态内存空间
for (int i = 0; i < 20; i++) // 初始化结构体对象
{
sqlist->data[i] = i + 1001;
}
sqlist->length = 20;
printList(sqlist);
// 操作1:查询获得顺序列表元素
int *ptr_elem = NULL, posi;
printf("要查询第几个数:");
scanf("%d", &posi);
getElem(sqlist, posi, &ptr_elem); // 获得数组的第二个元素,使指针ptr_elem指向该元素
printf("数组的第2个元素为:%d\n", *ptr_elem);
// 操作2:插入操作
int elem;
printf("要在什么位置插入什么数,如(11-1001): ");
scanf("%d-%d", &posi, &elem);
listInsert(sqlist, posi, elem);
printList(sqlist);
// 操作3:删除操作
int del_elem;
printf("要删除第几个数:");
scanf("%d", &posi);
del_elem = delElem(sqlist, posi);
printf("删除的数是:%d\n", del_elem);
printList(sqlist);
return 0;
}
网友评论