1、定义顺序表(静态分配内存)
#define MAXSIZE 1000
typedef struct{
int data[MAXSIZE];
int length;
}SqList;
2、创造顺序表
void Create(SqList &L)
{
int n;
cin >> n;
for(int i = 0; i < n; i ++)
{
cin >> L.data[i];
}
L.length = n;
}
3、输出顺序表
void Print(SqList L)
{
for(int i = 0; i < L.length; i ++)
{
cout << L.data[i] << ' ';
}
}
4、逆置,空间复杂度O(1)
void reverse(SqList &L)
{
int temp;
for(int i = 0; i < L.length / 2; i ++)
{
temp = L.data[i];
L.data[i] = L.data[L.length - i -1];
L.data[L.length - i - 1] = temp;
}
}
5、在第i个位置插入元素
bool ListInsert(SqList &L, int i, int e)
{
if(i < 1 || i > L.length + 1) return 0;
if(L.length == MAXSIZE) return 0;
for(int j = L.length; j >= i; j --)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length ++;
return 1;
}
6、删除最小值并返回
int DelMin(SqList &L)
{
int min = L.data[0], pos = 0;
for(int i = 1; i < L.length; i ++)
{
if(min > L.data[i])
{
min = L.data[i];
pos = i;
}
}
for(int j = pos; j < L.length - 1; j ++)
{
L.data[j] = L.data[j + 1];
}
L.length --;
return min;
}
7、删除所有值为x的元素,时间复杂度O(n),空间复杂度O(1)
void Del_x(SqList &L, int x)
{
int i = 0, j = 0;
for(i = 0; i < L.length; i ++)
{
if(L.data[i] != x)
L.data[j ++] = L.data[i];
}
L.length = j;
}
8、删除值为在包括s到t之间的元素,时间复杂度O(n),空间复杂度O(1)
void Del_st(SqList &L, int s, int t)
{
int i = 0, j = 0;
for(i = 0; i < L.length; i ++)
{
if(L.data[i] < s || L.data[i] > t)
{
L.data[j ++] = L.data[i];
}
}
L.length = j;
}
9、有序删重复值
void Del_same(SqList &L)
{
int i = 0, j = 0;
for(i = 0; i < L.length; i ++)
{
if(L.data[i] != L.data[i + 1])
L.data[j ++] = L.data[i];
}
L.length = j;
}
10、有序顺序表A、B合并为有序顺序表C
bool Merge(SqList A, SqList B, SqList &C)
{
int i = 0, j =0, k = 0;
while(i < A.length && j < B.length)
{
if(A.data[i] < B.data[j])
{
C.data[k ++] = A.data[i ++];
}
else
C.data[k ++] = B.data[j ++];
}
while(i < A.length) C.data[k ++] = A.data[i ++];
while(j < B.length) C.data[k ++] = B.data[j ++];
C.length = k;
}
希望大家多多支持,如果大家都喜欢我会继续更新的。