给我提供一个有初始化、建立、求表长、输出、插入、查找、删除功能的线性表c语言结构
时间: 2023-11-03 10:04:57 浏览: 79
typedef struct{
int *elem; // 存储空间基址
int length; // 当前长度
int size; // 分配的存储容量(以sizeof(int)为单位)
}List;
// 初始化线性表
void InitList(List &L, int size){
L.elem = (int*)malloc(size*sizeof(int));
L.length = 0;
L.size = size;
}
// 建立线性表
void CreateList(List &L, int n){
int i;
printf("请输入%d个整数:\n", n);
for(i=0; i<n; i++){
scanf("%d", &L.elem[i]);
}
L.length = n;
}
// 求表长
int ListLength(List L){
return L.length;
}
// 输出线性表
void PrintList(List L){
int i;
printf("线性表中的元素为:\n");
for(i=0; i<L.length; i++){
printf("%d ", L.elem[i]);
}
printf("\n");
}
// 插入元素
bool ListInsert(List &L, int i, int e){
int j;
if(i<1 || i>L.length+1){ // 判断插入位置是否合法
return false;
}
if(L.length >= L.size){ // 判断当前存储空间是否已满,若已满则扩容
L.elem = (int*)realloc(L.elem, (L.size+1)*sizeof(int));
L.size++;
}
for(j=L.length-1; j>=i-1; j--){ // 依次将第i个元素及后面的元素后移一位
L.elem[j+1] = L.elem[j];
}
L.elem[i-1] = e; // 将新元素插入到第i个位置上
L.length++; // 线性表长度加1
return true;
}
// 查找元素
int LocateElem(List L, int e){
int i;
for(i=0; i<L.length; i++){ // 从头到尾逐个查找元素
if(L.elem[i] == e){
return i+1; // 返回元素在线性表中的位置
}
}
return 0; // 若未找到则返回0
}
// 删除元素
bool ListDelete(List &L, int i, int &e){
int j;
if(i<1 || i>L.length){ // 判断删除位置是否合法
return false;
}
e = L.elem[i-1]; // 保存被删除的元素
for(j=i; j<L.length; j++){ // 依次将第i个元素及后面的元素前移一位
L.elem[j-1] = L.elem[j];
}
L.length--; // 线性表长度减1
return true;
}
阅读全文