一、顺序表有关算法
数据结构
#define maxsize 50
typedef struct{
ElemType data[maxsize];
int length;
}SqList;
1、顺序表位置 i i i 插入元素
int SeqInsert(int * seq,int i,int x){
int j;
if(seq->length == maxsize)
return -1; //空间已满
else if(i < 0 || i > seq->length - 1)
return -1; //位置无效
else{
for(j = i;j < seq->length;j++){
seq->data[j+1] = seq->data[j]; //元素后移
}
seq->data[i] = x;
seq->length++; //长度+1
return 1; //插入成功
}
}
2、删除顺序表的第 i i i个元素
int SeqDelete(int * seq,int i,int * px){
int j;
if(seq->length == maxsize)
return -1; //空间已满
else if(i < 0 || i > seq->length - 1)
return -1; //位置无效
else{
*px = seq->data[i]; //将i位置的元素赋值到px
for(j = i;j < seq->length;j++){
seq->data[j] = seq->data[j+1]; //元素向前覆盖
}
seq->length--; //长度+1
return 1; //删除成功
}
}
3、以第 i i i 个元素为基准左大右小排序
题目
有一整型顺序表L,元素从位置1开始存放,下列算法实现以第一个元素为基准,使其前面的元素都比它小,后面的元素均比它大。
代码
int part(SeqList * L){
int i,j;
int x;
x = L->data[1];
for(i = 2;i <= L->len;i++){
if(L->data[i] < x){
L->data[0] = L->data[i];
//将当前元素前面的元素后移 - 覆盖掉i元素,最前方留出一个空位插入
for(j = i-1;j >= 1;j--){
L->data[j+1] = L->data[j];
}
L->data[1] = L->data[0]; //移动i位置元素到最前方
}
}
}