数据结构对顺序表的注释详解:
#include <stdio.h>
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
//设置表的基础属性:
typedef struct {
ElemType* elem; //存储空间头地址
int length; //当前长度
int listsize; // 当前分配的存储容量(以sizeof(ElemType))为单位
}; SqList;
//建立一个新的表,并且对这个表进行初始化:
Status InitList_Sq(SqList& L){ //Status为返回值。 怎么判断是否用&?看对表的值有没有变化,如果没有就不用&
//构造一个空的线性表L
L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
//malloc 开房间 函数后为新开的房间的容量 sizeof为计算ElemType的长度
if (!L.elem) exit(OVERFLOW); //开完房间判断是否为空,如果为空则输出OVERFLOW
L.length = 0; //空表长度为0
L.listsize = LIST_INIT_SIZE;//空表初始容量
return OK;
}//InitList_Sq
//插入实现:
Status ListInstert_Sq(SqList& L, int i, ElemType e) //插入一个元素会对表内进行改变,这个时候需要用&
//第一个为引用表,向L里写入,第二个是要插入的值的类型,第三个是插入的值
{
//插入一个值的时候先考虑插入值i的合法性:i应该大于1且小于length所以先对i的值进行一个判定
if (i < 1 || i > L.lenth + 1) return ERROR;
//判定之后再考虑第二种情况:如果这个表是满的怎么办?就要新开一个房间供他插入
if (L.lenth >= L.listsize) {
newbase = (ElemType*)realloc(L.elem, //新建的表的首地址
(L.listsize + LISTINCREMENT) * sizeof(ElemType));
//增加房间的时候realloc为新建命令 长度为(L.listsize + LISTINCREMENT)也就是原来的的表长加上要新建的表长然后乘以他的内存字节
if (!newbase) exit(OVERFLOW);//和上面建立新表一样,判断新建表是否为空
L.elem = newbase; //新的首地址
L.listsize += LISTINCREMENT; //增加存储容量
}
//以上操作都完成时,我们就可以正常插入元素了
q = &(L.elem[i - 1];//q 为插入位置
for (p = &(L.elem[L.lengh - 1]); p >= q; --p) *(p + 1) = *p;
//p赋初值为链表的最后一个元素地址,p>=q表示循环直到p<q的时候结束,--p是使p指针的指向往前移一位
*q = e; //插入e
++ L.lenghth;//表长加1
return OK;
}//ListInsert_Sq
//接下来我们来做删除的部分
Status ListInstert_Sq(SqList &L, int i, ElemType &e) {
//在顺序表L中删除第i个元素,并用e返回值
//接下来我们还是要考虑数据的合法性,关于删除元素i的值的判定
if ((i < 1) || (i > L.lengh))return ERROR;
p = &(L.elem[i - 1]);
e = *p;//删除的值赋给e
q = L.elem + L.length - 1;//表尾元素位置
for (++p; p <= q; ++p)*(p - 1) = *p;
--L.lengh;//表长减一
return OK;
}//ListInsert_Sq
//最后做一下输出
int main()
{
SqList SL; //定义SL
InitList_Sq(SL);//调用
ListInsert_Sq(SL, 1, 11);
ListInsert_Sq(SL, 2, 12);
ListInsert_Sq(SL, 3, 13);
ListInsert_Sq(SL, 4, 14);
ListInsert_Sq(SL, 5, 15);
int a = LocateElem_Sq(SL, 15);
printf("第十五个元素的位置是%d\n", a);
ElemType eee;
ListDelete_Sq(SL,2,eee);
GetRlem_Sq(SL, 2, eee);
printf("2的位置:%d\n", eee);
}