线性表分为顺序存储和链式存储
线性表的顺序存储
一、顺序存储
定义一个顺序存储的线性表
#define MAXSIZE 100
typedef struct
{
ElemType elem[MAXSIZE];
int last ;
}SeqList;
说明
(1)通过定义语句 SeqList L;
利用 L.elem[i-1]来访问第i个元素
线性表最后一个元素的下标 L.last
线性表长度:L.last+1
(2)通过指针来定义 SeqList L1,*L; L=&L1;
利用 L->elem[i-1]来访问第i个元素
线性表最后一个元素的下标L->last
线性表长度L->last+1
二、线性表顺序存储的基本运算
1.查找操作
(1)按序号查找
(2)按内容查找
按内容查找例子:
int Locate(SeqList L,ElemType e)
{
int i=0;
while((i<L.last)&&(L.elem[i])!=e)
i++;
if(i<L/late)
return (i+1);
else
return (-1);
}
2.插入操作
插入第i个元素前(替换第i个元素)下标为i-1
#define OK 1
#definr ERROR 0
int InsList(SeqList *L,int i,ElemType e)
{
int k;
if((i<1)||(i->last+2))
{
printf("输入位置不合法");
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
}
3.线性表的删除
int DelList(SeqList *L,int i,ElemType *e)
{
int k;
if(i<1||i>L->last+1)
{
printg("删除位置不正确,重新输入");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;i<L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);
}
4.线性表的合并
void mergeList(SeqList *LA,SeqList *LB,SeqList *LC)
{
int i,j,k,l;
i=0; j=0; k=0;
while(i<=LA->last&&j<=Lb->last)
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]=LA->elem[i];
i++; k++;
}
else
{
LC->elem[k]=LB->elem[j];
j++; k++
}
while(i<=La->last)
{
LC->elem[k]=LA->elem[i];
i++; k++;
}
while(j<=La->last)
{
LC->elem[k]=LB->elem[j];
j++; k++
}
Lc->last=LA->last+Lb->last+1;
}
今日所想:
我曾七次鄙视自己的灵魂
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它软弱地忍耐且把这忍耐说成是强大时;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。
三重境界
1.井中月
2.无欲则刚
3.德者,人之所欲也