#include<iostream>
using namespace std;
#define MAXSIZE 100
#define STEP 10
typedef struct {
int* data;
int length;
int maxsize;
}sqlist;
void Init(sqlist &s) {
s.data = new int[MAXSIZE];
s.length = 0;
s.maxsize = MAXSIZE;
}
bool Insert(sqlist &s, int pos, int value) {
if (pos > s.length + 1 || pos < 0) {
cout << "插入位置错误" << endl;
}
if (s.length == s.maxsize) {
int *interdata = new int[s.maxsize + STEP];
for (int i = 0; i < s.maxsize; i++)
{
interdata[i] = s.data[i];
}
s.data = interdata;
s.maxsize = s.maxsize + STEP;
}
for (int i = s.length; i >= pos; i--)
{
s.data[i] = s.data[i - 1];
}
s.data[pos - 1] = value;
s.length = s.length + 1;
return true;
}
bool Delete(sqlist &s, int pos, int &e) {
if (s.length == 0) {
return false;
cout << "顺序表内无元素" << endl;
}
e = s.data[pos - 1];
for (int i = pos; i <= s.length; i++)
{
s.data[i - 1] = s.data[i];
}
s.length--;
return true;
}
bool LocateElem(sqlist &s, int e, int &pos) {
for (int i = 0; i < s.length; i++) {
if (s.data[i] == e) {
pos = i + 1;
return false;
}
}
return true;
}
void Output(sqlist &s) {
cout << "当前顺序表长度:" << s.length << endl;
cout << "顺序表中的数据为:";
for (int i = 0; i < s.length; i++)
{
cout << s.data[i] << ",";
}
cout << endl;
}
void Release(sqlist &s) {
delete[] s.data;
}
int Read(sqlist &s, int pos) {
return s.data[pos - 1];
}
bool DeleteMinElem(sqlist &l, int &value) {
if (l.length == 0) {
cout << "表空!" << endl;
return false;
}
int min = l.data[0];
int minindex = 0;
for (int i = 0; i < l.length; i++) {
if (min > l.data[i]) {
min = l.data[i];
minindex = i;
}
}
value = min;
l.data[minindex] = l.data[l.length - 1];
l.length--;
return true;
}
int main() {
int value;
cout << "顺序表" << endl;
sqlist s;
Init(s);
cout << endl;
Output(s);
cout << endl;
cout << "删除表头元素:" << endl;
DeleteMinElem(s, value);
Output(s);
cout << endl;
cout << "将一些元素插入表中:" << endl;
cout << endl;
Insert(s, 1, 10);
Insert(s, 1, 20);
Insert(s, 1, 12);
Insert(s, 1, 9);
Insert(s, 1, 1);
Output(s);
cout << endl;
cout << "删除表头的两个元素:" << endl;
DeleteMinElem(s, value);
DeleteMinElem(s, value);
Output(s);
cout << endl;
}