- /*
- 线性表的顺序存储结构,在存、读数据时,时间复杂度为O(1),在插入或删除时,时间复杂度为O(n)
- */
- /* 线性表的顺序存储结构代码*/
- #define MAXSIZE 20 //存储空间初始分配量
- typedef int ElemType; //ElemType类型根据实际情况而定,这里假定为int类型
- typedef struct
- {
- ElemType data[MAXSIZE]; //数组存储数据元素
- int length; //线性表的当前长度
- }SqList;
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- typedef int Status;
- //获取线性表元素的操作
- Status GetElem(SqList L, int i, ElemType *e )
- {
- if (L.length<=0 || i<1 || i>L.length)
- {
- return ERROR;
- }
- *e = L.data[i-1];
- return OK;
- }
- //线性表的插入操作
- Status ListInsert(SqList* L, int i, ElemType e)
- {
- if ( L->length == MAXSIZE) //顺序线性表已满
- {
- return ERROR;
- }
- else if (i>L->length+1 || i<1) //i不在正确范围内
- {
- return ERROR;
- }
- else if (i<=L->length) //插入的数据不在表尾
- {
- for ( int k=L->length-1; k>=i-1; k--)//将要插入位置后的数据元素向后移动一位
- {
- L->data[k+1] = L->data[k];
- }
- L->data[i-1] = e;
- }
- else if (i == L->length+1) //插入的位置为表尾
- {
- L->data[i-1] = e;
- }
- L->length++; //线性表的长度+1
- return OK;
- }
- //顺序存储的线性表删除操作
- Status ListDelete(SqList* L, int i, ElemType* e)
- {
- //删除的位置不合理,抛出异常
- if (L->length==0 || i<1 || i>L->length)
- {
- return ERROR;
- }
- //返回删除的数据元素的值
- *e = L->data[i-1];
- //若删除的不是线性表尾部元素,则需要移动线性表
- if (L->length != i)
- {
- for (int k=i; k<=L->length-1; k++)
- {
- L->data[k-1] = L->data[k];
- }
- }
- //线性表的长度减1
- L->length--;
- return OK;
- }