线性表删除最小元素,空出的位置用最后一个元素填补
题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出出错信息并退出运行
-
代码:
#include <iostream>
#include <cstdlib>
#define MAX_LENGTH 10
#define ADD_LWNGTH 10
using namespace std;
typedef struct {
int *elem;
int length;
int maxLength;
}Sqlist;
//创建线性表
void initList(Sqlist &L){
L.elem = (int *)malloc(MAX_LENGTH * sizeof(int));
if(!L.elem){
cout << "线性表创建失败";
}
L.length = 0;
L.maxLength = MAX_LENGTH;
}
//像表中添加元素
Sqlist insert_liner(Sqlist &L,int i,int e){
if(i < 1 || i > L.length + 1){
cout << "error";
}
//不够地方了扩容用
if(L.length >= L.maxLength){
int *base = (int *)realloc(L.elem,(L.maxLength + ADD_LWNGTH) * sizeof (int));
L.elem = base;
L.maxLength = L.maxLength + ADD_LWNGTH;
}
int *p,*q;
p = &(L.elem[i - 1]);
for(q = &(L.elem[L.length - 1]);q >= p;q--){
*(q + 1) = *(q);
}
*p = e;
L.length++;
return L;
}
//删除表中最小值
int del_small(Sqlist &L){
int value;
int pos = 0;
//假设最小值为顺序表中的第一个元素,然后去跟其他元素进行比较,如果更小就记录下来
value = L.elem[0];
for(int i = 1;i < L.length;i++){
if(value > L.elem[i]){
value = L.elem[i];
pos = i;
}
}
L.elem[pos] = L.elem[L.length - 1];
L.length--;
return value;
}
//打印线性表
void print(Sqlist L){
for(int i = 0;i < L.length;i++){
cout << L.elem[i] << " ";
}
cout << endl;
}
int main (){
Sqlist L;
initList(L);
int a[9] = {3443,78,45,34,21,545,45,56,345};
for(int i = 1;i <= 9;i++){
insert_liner(L,i,a[i - 1]);
}
cout << "原始链表为:";
print(L);
int b = del_small(L);
cout << "删除的最小元素为:" << b << endl;
cout << "删除之后的链表为:";
print(L);
}
-
这个就是为了完成一个功能,我就把线性表弄成输入固定的了。