严的书就是看不懂
严的书就是看不懂,不知道是本人基础差,比较笨的原因,还是真的是复杂化了下面抄两段代码,一段是严的,另一段是自考书<<数据结构导论的>>
带着一些疑问,希望有人解答一下。
来自数据结构导论 :
1。定义顺序表
const maxsize=100;
typedef struct
{
int data[maxsize];
int last; //数据域当前的长度
}sqlist;
sqlist L;
2.插入运算
void insert_sqlist(sqllist L int x,int i)
{
if (L.last==maxsize)error('表满'); /*溢出*/
if ((i<1)||(i>L.last+1))error('非法位置');
for(j=L.last;j=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.last=L.last+1;
}
(1)last都没被赋怎么表示顺序表的末点?
(2)i>L.last+1 为什么要L.last+1才表示溢出? >L.last不就可以表示溢出?
(3)为什么要在第i个位置上插入x,却是L.date[i-1]位置插入,是因为数组从0开始,所以i-1?
摘自严的书:
//线性表的动态分配顺序存储结构
#define list_init_size 100 //线性表存储空间的初始分配量
#define listincrement 10 //线性表存储空间的分配增量
typedef struct
{
elemtype *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的容量
}sqlist;
status initlist_sq(sqlist &L)
{
//构造一个空的线性表
L.elem=(elemtype*)malloc(list_init_size*sizeof(elemtype));
if(!L.elem)exit(overflow);//存储分配失败
L.length=0; //空表长度为0
L.listsize=list_init_size //初始化容量
return OK;
}
//initlist_sq
插入运算
status listinsert_sq(sqlist &L ,int i,Elemtype e)
{
if (i<1||i>L.length+1)return error;
if (L.length>=L.listsize
{ //当前空间已满,增加分配
newbase=(elemtype*)realloc(L.elem,(L.listsize+listincrement)*size(elemtype));
if(!newbase)exit(overflow);
L.elem=newbase;
L.listsize+=listincrement;
}
iq=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
问题:
(1)L.elem=(elemtype*)malloc(list_init_size*sizeof(elemtype));此句什么意思?