顺序表插入操作
bool ListInsert(SqList *L, int i, int e)
{
if (i < 1 || i > L->length + 1)
return false;
if (L->length >= L->MaxSize)
return false;
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i - 1] = e;
L->length++;
return true;
}
顺序表删除操作
bool ListDelete(SqList *L, int i, int *e)
{
if (i < 1 || i > L->length + 1)
return false;
*e = L->data[i - 1];
for (int j = i; j < L->length; j++)
L->data[j - 1] = L->data[j];
L->length--;
return true;
}
顺序表按值查找(顺序查找)&& 按位查找
int LocateElem(SqList L, int e)
{
int i;
for (i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1;
return 0;
}
int GetElem(SqList L, int i)
{
return L.data[i - 1];
}
完整代码
#include <stdio.h>
#include <stdbool.h>
#define InitSize 100
typedef struct
{
int data[InitSize];
int length;
int MaxSize;
} SqList;
void InitList(SqList *L)
{
for (int i = 0; i < InitSize; i++)
L->data[i] = 0;
L->length = 0;
L->MaxSize = InitSize;
}
bool ListDisert(SqList *L, int i, int e)
{
if (i < 1 || i > L->length + 1)
return false;
if (L->length >= L->MaxSize)
return false;
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i - 1] = e;
L->length++;
return true;
}
bool ListDelete(SqList *L, int i, int *e)
{
if (i < 1 || i > L->length + 1)
return false;
*e = L->data[i - 1];
for (int j = i; j < L->length; j++)
L->data[j - 1] = L->data[j];
L->length--;
return true;
}
int LocateElem(SqList L, int e)
{
int i;
for (i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1;
return 0;
}
int GetElem(SqList L, int i)
{
return L.data[i - 1];
}
void create(SqList *L)
{
int n, j;
if (n > L->MaxSize)
return;
printf("请输入要输入的元素个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf("请输入第%d个元素:", i + 1);
scanf("%d", &j);
L->data[i] = j;
}
L->length = n;
}
void show(SqList L)
{
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
int main()
{
SqList L;
InitList(&L);
create(&L);
printf("顺序表的值为:\n");
show(L);
printf("第 %d 个元素为:%d \n",2,GetElem(L,2));
printf("值为 5 的数据元素的位序为:%d \n",LocateElem(L,5));
return 0;
}