//静态表
typedef struct {
int data[MAXSIZE];
int length;
}StaticSqList;
顺序表题目
//1.删除最小元素
bool DeleteMinElement(StaticSqList &L,int value){
if(L.length==0) return false;
//最小的元素
int min = L.data[0];
//最小元素的下标
int min_x = 0;
//循环,比较出最小元素
for(int i=0;i<L.length;i++){
if(L.data[i]<min){
min = L.data[i];
min_x = i;
}
}
//最后一个元素替代本元素
L.data[min_x] = L.data[L.length-1];
//数组减少
L.length--;
value = min;
//返回
return true;
}
//2.逆置元素
bool reverseList(StaticSqList &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;
}
return true;
}
//3.删除所有X的元素
bool deletexelem(StaticSqList &L,int x){
int u = 0;
//全过一遍
for(int i=0;i<L.length;i++){
if(L.data[i]!=x){
//不是X元素U,I就一直前进,是X元素就U停一下
L.data[u] = L.data[i];
u++;
}
}
//U是删除X元素个数后剩余的元素个数
L.length = u;
return true;
}
//4.(有序)删除S-T之间的所有元素
bool deleteSToTElemY(StaticSqList &L,int s,int t){
int i,j;
//下标合法性判定
if(s>=t || L.length==0)return false;
//找到第一个大于等于s的元素下标
for(i=0;i<L.length&&L.data[i]<s;i++);
//找不到判定查找失败
//注意i最后一次循环会++变为L.length
if(i>=L.length)return false;
//找到第一个大于T的下标
for(j=i;j<L.length&L.data[j]<=t;j++)
//移动
for(;j<L.length;i++,j++){
L.data[i] = L.data[j];
}
L.length = i
return true;
}
//5.(无序)删除S-T之间的所有元素
bool deleteSToTElemW(StaticSqList &L,int s,int t){
int x=0;
//下标合法性判定
if(s>=t || L.length==0)return false;
//操作与第四题类似
for(int i=0;i<L.length;i++){
if(L.data[i]<s || L.data[i]>t){
L.data[x] = L.data[i];
x++;
}
}
L.length = x;
return true;
}
//6.(有序)删除重复值的元素(插入排序)
bool deleteRepeatElem(StaticSqList &L){
if(L.length == 0)return false;
int i,j; //i存储不相同的元素,J为工作指针
for(i=0,j=1;j<L.lengthj++){
//元素不相同,我们才移动
//元素相同 i不动,j移动,相当于去掉了i的元素
if(L.data[i]!=L.data[j])
L.data[++i] = L.data[j];
}
//注意顺序表长度从1开始
L.length = i+1;
return true;
}
//7.有序的顺序表合并
bool mergeTwoLists(StaticSqList &a,StaticSqList &b,StaticSqList &c){
//防止溢出
if(a.length+b.length > MAXSIZE)return false;
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;
return true;
}