#include <stdio.h>
#define MaxSize 50
typedef struct{
ElemType data[MaxSize];
int length;
}SqList; //给这个结构体起别名SqList
typedef int ElemType; //给int起别名ElemType
//建立顺序表
void CreateList(SqList * &L,ElemType a[],int n)
{ int i=0,k=0;
L=(SqList *)malloc(sizeof(SqList));
/* sizeof(SqList):计算结构体 SqList 占用的总字节数
malloc(sizeof(SqList)):向系统申请一块大小为 SqList 的内存空间,malloc 返回的是 void* 类型(无类型指针)
(SqList *):类型强制转换,将 void* 转换为 SqList* 类型
*/
while (i<n)
{ L->data[k]=a[i];
k++;i++;
}
L->length=k;
}
//初始化线性表
void InitList(SqList * &L)
{ L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
//销毁线性表
void DestroyList(SqList * &L)
{
free(L);
}
//判断线性表是否为空表
bool ListElemType(SqList * L)
{
return(L->length==0);
}
//求线性表的长度
int ListLength(SqList * L)
{
return(L->length);
}
//输出线性表
void DispList(SqList * L)
{ for (int i=0;i<L->length;i++)
printf("%d",L->data[i]);
printf("\n");
}
//按序号求线性表中的元素
bool GetElem(SqList * L,int i,ElemType &e) // 调用时
{ if (i<1 || i>L->length) // ElemType result;
return false; // GetElem(L, 2, result); // result 和函数内的 e 是同一个变量
e=L->data[i-1]; // 函数内修改 e,外部的 result 也会同步改变
return true; // 这里的 e 是外部传入变量的一个别名
} // 修改 e 就是直接修改外部的原始变量
//按元素值查找
int LocateElem(SqList * L,ElemType e)
{ int i=0;
while (i<L->length && L->data[i]!=e)
i++;
if (i>=L->length)
return 0;
else
return i+1;
}
//插入数据元素
bool ListInsert(SqList * &L,int i,ElemType e) // 这里的 e 是外部传入值的一个副本
{ int j; // 修改 e 不会影响外部的原始变量
if (i<1 || i>L->length+1 || L->length==MaxSize)
return false;
i--;
for (j=L->length;j>i;j--)
L->data[j]=L->data[j-i];
L->data[i]=e;
L->length++;
return true;
}
//删除数据元素
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;
}