if(e <= *((*L).elem+j)) break;
// 将e插表中的第j+1个位置 ListInsert(L, j+1, e); }
return 1; }
// 按非升序建立n个元素的线性表。 int CreatDescend(SqList *L, int n) {
int i,
j; //记录数据要插入的位置 ElemType e;
InitList(L);
printf(\请输入%d个元素:\\n\ scanf(\
ListInsert(L, 1, e); // 在空表中插入第1个元素 for(i = 1; i < n; i++) {
scanf(\
for(j = 0;j < (*L).length; j++) if(e >= *((*L).elem + j)) break;
ListInsert(L, j + 1, e); }
return 1; }
// 进行测试
// 数据元素判定函数(平方关系)
int comp(ElemType c1, ElemType c2) {
if(c1 == c2*c2) return 1; else
return 0; }
// ListTraverse()调用的函数(类型要一致)
void visit(ElemType *c) {
printf(\}
// ListTraverse()调用的另一函数(元素值加倍) void dbl(ElemType *c) {
*c *= 2; }
int main() {
SqList L;
SqList La, Lb, Lc; ElemType e, e0, d; int i;
int j, k, n;
int a[4] = { 3, 5, 8, 11},
b[7] = { 2, 6, 8, 9, 11, 15, 20};
// 初始化操作 i = InitList(&L);
printf(\初始化L后:L.elem=%u L.length=%d L.listsize=%d\\n\\n\ L.elem, L.length, L.listsize);
// 通过插入操作创建一个顺序表 for(j=1;j<=5;j++)
ListInsert(&L, 1, j);
printf(\在L的表头依次插入1~5后:*L.elem=\ for(j =1 ; j <= 5; j++)
printf(\ printf(\
printf(\ L.elem, L.length, L.listsize);
// 判断顺序表是否为空表 i = ListEmpty(L);
printf(\是否空:i=%d(1:是 0:否)\\n\\n\
// 清空顺序表
i = ClearList(&L);
printf(\清空L后:L.elem=%u L.length=%d L.listsize=%d\\n\\n\ L.elem,L.length,L.listsize);
i = ListEmpty(L);
printf(\是否空:i=%d(1:是 0:否)\\n\\n\
// 再次通过插入操作创建一个新的顺序表 for(j = 1; j <= 10; j++) ListInsert(&L,j,j);
printf(\在L的表尾依次插入1~10后:*L.elem=\for(j = 1; j <= 10; j++)
printf(\printf(\
printf(\ L.elem, L.length, L.listsize);
// 插入一个数的操作 ListInsert(&L, 1, 0);
printf(\在L的表头插入0后:*L.elem=\
// 求当前顺序表的长度,并打印顺序表, ListLength(L)返回元素个数 for(j = 1; j <= ListLength(L); j++) printf(\printf(\
printf(\有可能改变) L.length = %d(改变)\ \改变)\\n\\n\ L.elem, L.length, L.listsize);
// 取得顺序表的第5个数并用e返回 GetElem(L, 5, &e);
printf(\第5个元素的值为:%d\\n\\n\
// 返回第一个与j满足关系compare的数据元素的位序 // 在这里举了两个例子,一个符合,一个不符合的 for(j = 3; j <= 4; j++) {
k = LocateElem(L, j, comp); if(k)
printf(\第%d个元素的值为%d的平方\\n\\n\ else
printf(\没有值为%d的平方的元素\\n\\n\}
// 求前驱的操作,在这里举了两个例子,一个符合,一个不符合的(即头) for(j = 1; j <= 2; j++) {
GetElem(L, j, &e0); // 把第j个数据赋给e0 i = PriorElem(L,e0,&e); // 求e0的前驱
if(i == 0)
printf(\元素%d无前驱\\n\\n\ else
printf(\元素%d的前驱为:%d\\n\\n\}
// 求后继操作,在这里同样举了两个例子,一个符合,一个不符合的(即尾) for(j = ListLength(L)-1; j <= ListLength(L); j++) {
GetElem(L,j,&e0); // 把第j个数据赋给e0 i = NextElem(L,e0,&e); // 求e0的后继 if(i == 0)
printf(\元素%d无后继\\n\\n\ else
printf(\元素%d的后继为:%d\\n\\n\}
// 删除操作
k = ListLength(L);
for(j = k+1; j >= k; j--) {
// 删除第j个数据
i = ListDelete(&L, j, &e); if(i == 0)
printf(\删除第%d个数据失败\\n\\n\ else
printf(\删除的元素值为:%d\\n\\n\}
// 对顺序表的所有元素调用函数visit printf(\依次输出L的元素:\ListTraverse(L,visit);
//对顺序表的所有元素调用函数dbl printf(\的元素值加倍后:\// 依次对元素调用dbl(),元素值乘2 ListTraverse(L,dbl); // 显示链表
ListTraverse(L,visit); printf(\
// 销毁顺序表 DestroyList(&L);
printf(\销毁L后:L.elem=%u L.length=%d L.listsize=%d\\n\\n\\n\