关于顺序表的一些代码
6-1 顺序表的删除操作
int ListDelete(SqList& L, int i){
if (L.length==0||i<1 || i>L.length) return 0;
if (i < L.length)
for (int j= i;j < L.length;j++)
L.elem[j - 1] = L.elem[j];
L.length--;
return 1;
}
6-2 有序表的插入【有题解视频】
void ListInsertSort(SqList *L, DataType x){
if(L->length<0) return;
if(L->length++==0) L->items[0]=x;
int k;
for(int i = 0;i<L->length;i++)
if(x<L->items[i]){
k=i; break;
}
for(int j = L->length;j>k;j--)
L->items[j]=L->items[j-1];
L->items[k]=x;
}
6-3 拼接两个顺序表【有题解视频】
void ListJoin(List A,List B){
for (int i=0;i<B.num;i++)
InsertList(&A,LengthList(A),B.dat[i]);
DispList(A);
}
6-4 数据结构-顺序表-学生的成绩信息(TODO:SeqList 排序, gCC )
int *p;
int cmpfunc ( const void *a ,const void *b) {
return (*(Student *)a).score[*p] > (*(Student *)b).score[*p] ? 1 : -1;
}
void SortSeqListBySubject( SeqList * L ,int k){
p = &k;
qsort(L->stu, L->len, sizeof(L->stu[0]), cmpfunc);
}
6-5 数据结构-顺序表-学生的成绩信息(TODO:SeqList 逆转, gCC )
void ReverseSeqList( SeqList * L){
SeqList tmp;
int left=0;int right=L->len-1;
while(left<right){
tmp.stu[0] = L->stu[left];
L->stu[left++] = L->stu[right];
L->stu[right--] = tmp.stu[0];
}
}
6-6 顺序表基本运算算法的实现
/**
* 初始化顺序表L。
*/
void InitList(SqList * &L){
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
/**
* 释放顺序表L。
*/
void DestroyList(SqList * &L){
free(L);
}
/**
* 判断顺序表L是否为空表。
* 空表返回true,非空表返回false。
*/
bool ListEmpty(SqList * L){
return(L->length==0);
}
/**
* 返回顺序表L的元素个数。
*/
int ListLength(SqList * L){
return(L->length);
}
/**
* 输出顺序表L。
*/
void DispList(SqList * L){
for (int i=0;i<L->length;i++)
printf("%c ",L->data[i]);
printf("\n");
}
/**
* 获取顺序表L中第i(1≤i≤L->length)个元素,将其值存入e,然后返回true;
* 如果不能获取到第i个元素,返回false。
*/
bool GetElem(SqList * L, int i, ElemType &e){
if (i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
/**
* 在顺序表L中查找元素e。
* 如果存在e,则返回e的逻辑序号,否则返回0。
*/
int LocateElem(SqList * L, ElemType e){
int i=0;
while (i<L->length && L->data[i]!=e)
i++;
return i>=L->length? 0 : i+1;
}
/**
* 在顺序表L中第ii(1≤i≤L->length)个位置上插入元素e。
* 插入成功,返回true。插入不成功,返回false。
*/
bool ListInsert(SqList * &L, int i, ElemType e){
int j;
if (i<1 || i>L->length+1)
return false;
i--;
for (j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
/**
* 从顺序表L中删除第ii(1≤i≤L->length)个元素。
* 删除成功,返回true。删除不成功,返回false。
*/
bool ListDelete(SqList * &L, int i, ElemType &e){
int j;
if (i<1 || i>L->length)
return false;
i--;
e=L->data[i];
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}