<資料結構>順序表的插入、刪除操作
阿新 • • 發佈:2021-03-23
插入操作
#include<stdio.h>
#define maxSize 10 //定義最大長度
/*靜態分配實現順序表
缺點:陣列存滿了無法擴大空間,因此對應的有動態分配實現陣列
*/
struct List
{
int data[maxSize]; //用靜態的“陣列”存放資料
int length; //順序表的當前長度,即實際已經存放的資料
};
struct List SqList;
void InitList(struct List *L)
{
L->length = 0;
}
_Bool InsertList(struct List * L, int position, int e)
{
if (position <0|| position > L->length)
//判斷插入位置是否合法
{
printf("error position!insert fail!\n");
return 0;
}
if (L->length >= maxSize)
{
printf("儲存空間已滿\n");
return 0;
}
for (int i = L->length-1; i >= position; i--)
{
L->data[i + 1] = L->data[i]; //將位置在position及其以後的元素從後往前向後移一位
}
L->data[position] = e;
L->length++;
return 1;
}
int Main1()
{
InitList(&SqList);
for (int i = 0; i < maxSize; i++) //初始化資料
{
SqList.data[i] = i * 5;
SqList.length++;
}
printf("初始化後的資料:");
for ( int i = 0; i < SqList.length; i++)
{
printf("%d\t", SqList.data[i]);
}
printf("\n");
InsertList(&SqList, 7, 6);
printf("插入後資料:");
for (int i = 0; i < SqList.length; i++)
{
printf("%d\t", SqList.data[i]);
}
return 0;
}
執行結果:
刪除操作
_Bool ListDelete(struct List *L, int position, int *e),刪除下標為position的元素,並用e返回刪除元素的值
_Bool ListDelete(struct List *L, int position, int *e)
{
if (position<0 || position>L->length - 1)
{
return 0;
}
if (L->length <= 0)
{
return 0;
}
*e = L->data[position];
for (int i = position; i < L->length; i++)
{
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}