顺序表中插入,删除元素
有一顺序遍表L为(8,2,6,9,10),编程实现:
(1)将数7插入到该表第3个位置,形成新的顺序表,并输出结果;
(2)将新的顺序表中第4个位置的元素删除。将问题分析、完整代码(关键代码需有注释),程序运行结果粘贴到下方。
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct {
int data[MaxSize]; //存放顺序表元素
int length; //存放顺序表的长度
} SqList; //顺序表的类型
//初始化线性表
void init_list(SqList *L) {
L = (SqList *)malloc(sizeof(SqList));
//分配存放线性表的空间
L -> length = 0;
}
//用于插入数据元素
bool insert_list(SqList *L,int i,int e) {
int j;
if(i < 1 || i > L -> length + 1 || L -> length == MaxSize)
return false;
//如果插入的位置不合法,或者没有空地方插了,就返回false
i--;
for(j = L -> length; j > i; j--) {
L -> data[j] = L -> data[j - 1];
}
//将元素往后移动,给i位置留出一个空位
L -> data[i] = e;
L -> length++;
//顺序表长度加一
return true;
}
bool delete_list(SqList *L,int i,int &e) {
int j;
if(i < 1 || i > L -> length)
return false;
//如果要删的位置不合规就返回false
i--;
e = L -> data[i];
//用变量e保存要删的那个数的值
for(j = i; j < L -> length - 1; j++) {
L -> data[j] = L -> data[j + 1];
}
//将位置i之后的位置往前移动一个位置
L -> length--;
//删除一个元素后,表的长度减一
return true;
}
void print_list(const SqList *L) {
printf("顺序表的元素为:");
for(int i = 0; i < L -> length; i++) {
printf("%d ",L -> data[i]);
}
printf("\n");
}
int main() {
SqList l;
init_list(&l);
l.data[0] = 8;
l.data[1] = 2;
l.data[2] = 6;
l.data[3] = 9;
l.data[4] = 10;
l.length = 5;
//初始化线性表里的值
printf("初始的顺序表为:");
print_list(&l);
insert_list(&l,3,7);
printf("将数7插入到该表第3个位置后的顺序表为:");
print_list(&l);
int a = 6;
delete_list(&l,4,a);
printf("将新的顺序表中第4个位置的元素删除后的顺序表为:");
print_list(&l);
}