顺序表是在计算机中以数组的形式保存的线性表,采用顺序存储结构的线性表通常称为顺序表
#include<stdio.h>
//构造一个顺序表结构体
typedef struct SeqList{
int array[100];
int size;
} SeqList;
头插 时间复杂度O(n)
在表头插入元素value,需要将表中的元素依次向后移动一位,然后将要插入的元素value赋值给数字的首元素
void SeqListPushFront(SeqList *sl,int value){
for(int i = sl->size;i > 0;i--){
sl->array[i] = sl->array[i-1];
}
sl->array[0] = value;
sl->size++;
}
头删 时间复杂度O(n)
删除顺序表中的第一个元素,只要将顺序表第二个元素开始,依次向前移动一位,覆盖原来顺序表中的第一个元素
void SeqListPopFront(SeqList *sl,int value){
if(sl->size == 0){
printf("顺序表为空\n");
}
for(int i = 1;i <= sl->size;i++){
sl->array[i-1] = sl->array[i];
}
sl->size--;
}
中间插入
在数序表第i个位置插入元素value,首先将顺序表第i个位置的元素依次向后移动一个位置,然后将元素value插入第i个位置,先移动最后一个元素,在移动倒数第二个,以此类推
void SeqListPushMiddle(SeqList *sl,int i,int value){
//判断插入位置是否合法
if(i < 1||sl->size >100){
printf("插入的位置不合法!\n");
}
//判断顺序表是否已满
if(sl->size ==100){
printf("顺序表已满\n");
}
for(int k = sl->size - 1;k >= i - 1;k--){
sl->array[k+1] = sl->array[k];
}
sl->array[i-1] = value;
sl->size++;
}
中间删除
删除顺序表第i个位置的元素,将第i个位置以后的元素依次往前移一个位置
void SeqListDelMiddle(SeqList *sl,int i){
//判断顺序表是否为空
if(sl->size < 1){
printf("顺序表为空\n");
}
for(int k = i;k < sl->size;k++){
sl->array[k] = sl->array[k+1];
}
sl->size--;
}
尾插
在顺序表表尾插入元素value,将元素value的值复制给顺序表最后一个元素的下一个元素。尾插首先需要判断顺序表是否已满
void PushBack(SeqList *sl,int value){
if(sl->size == 100){
printf("顺序表已满\n");
}
sl->array[sl->size] = value;
sl->size++;
}
尾删
删除表尾怨妇,只需将元素的长度减1,类似出栈操作
void PopBack(SeqList *sl){
if(sl->size == 0){
printf("顺序表为空\n");
}
sl->size--;
}