无概念分享
- 顺序表的插入
- 顺序表的删除
1.顺序表的插入
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10//默认最大长度
typedef struct {
int* data;
int MaxSize;//最大长度
int length;//当前容量
}SeqList;
//初始化
void InitList(SeqList& L)
{
L.data = (int*)malloc(sizeof(int) * InitSize);
for (int i = 0; i < L.MaxSize; i++)
L.data[i] =0;
L.length = 0;
}
//插入元素
void ListInsert(SeqList& L, int i, int e) {
for (int j = L.length; j >= i; j--)
L.data[j] = L.data[j - 1];
L.data[i - 1] = e;
L.length++;
}
int main()
{
SeqList L;
InitList(L);
for (int i = 0; i < 5; i++) { //设置顺序表前5个元素的值
L.data[i] = i;
L.length++;
}
ListInsert(L, 3, 999);
for (int i = 0; i < L.length; i++) //打印整个data数组
printf("data[%d] = %d\n", i, L.data[i]);
return 0;
}
为了代码健壮性,在插入数组元素时需要将插入的位置i做判断,因为顺序表的存储结构在内存中是连续存储的,所以有两个判断,data数组未满"if( i<1 || i>L.length+1) false;" 和 data数组已满"if(L.length >= L.MaxSize)" false;
2.顺序表的删除
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10//默认最大长度
typedef struct {
int* data;
int MaxSize;//最大长度
int length;//当前容量
}SeqList;
//初始化
void InitList(SeqList& L)
{
L.data = (int*)malloc(sizeof(int) * InitSize);
for (int i = 0; i < L.MaxSize; i++)
L.data[i] =0;
L.length = 0;
}
//删除元素
void DeleteList(SeqList& L, int i,int& e)
{
if (i > 0 && i <= L.length)
{
e = L.data[i - 1];
for (int j = i; j <= L.length; j++)
L.data[j - 1] = L.data[j];
L.length--;
}
}
int main()
{
SeqList L;
InitList(L);
for (int i = 0; i < 5; i++) { //设置顺序表前5个元素的值
L.data[i] = i;
L.length++;
}
int e = -1;
DeleteList(L, 2, e);
printf("e=%d\n", e);
for (int i = 0; i < L.length; i++) //打印整个data数组
printf("data[%d] = %d\n", i, L.data[i]);
return 0;
}
删除时只需要判断i是否在[1,L.length]