2.1 线性表的逻辑结构
2.2 线性表的顺序存储结构
顺序表:随机存取(访问、读写)
链 表:顺序存取
typedef int ElemType;
#define MAXSIZE 100 /*数组最大空间*/
typedef struct{
ElemType data[MAXSIZE]; /*表中元素用数组存放/
int length; /*表长度(表中有多少个元素)*/
}SqList; /*顺序表的类型*/
Sqlist s1,s2;
s1.data[i-1]=90
顺序表的基本操作实现(代码实现)
- 初始化
- 插入
- 删除
- 查找
应用举例
顺序表算法的时间复杂度分析
线性表小结
2.3 线性表的链式表示和实现
(1)单链表的建立
尾插法
头插法
LinkList createLinkList1() //头插法建立带表头结点的单链表
{ LNode *L,*s; //L头指针, s指向新结点
L=(LNode *) malloc(sizeof(LNode)); //申请空白结点,L指向头结点
L->next =NULL; //建立了头结点
for(i=26;i>=1;i--)
{ s=(LNode *) malloc(sizeof(LNode)); //申请空白结点,s指向
if (!s) return NULL;
s->data=i+‘a’-1; //给s->data 赋值
s->next=L->next; L->next =s; //s指向的结点插入头结点后面
}
return L;
}
(2)单链表的查找和输出
bool GetElem1(LinkList L, int i, ElemType *e)
{ //读取带表头结点的单链表L的第i个数据元素
LNode *p=L->next; //从头指针开始
int j=1;
while(p&&j<i) //查找第i个元素
{ p=p->next;
j++;
}
if( !p || j>i ) return false; //第i个元素不存在,i>n或i<1
*e=p->data;
return true;
}
(3)单链表的插入
(4)单链表的删除
应用举例
LinkList mergeDList(LinkList La,LinkList Lb)
{
LinkList Lc;
LNode *pa,*pb,*pc,*pt;
int tmp;
pa=La->next ; pb=Lb->next ;
pc=(LNode*) malloc(sizeof(LNode));
if (!pc) return NULL;
Lc=pc;
while (pa&&pb)//依次比较
{
pt=(LNode*)malloc(sizeof(LNode));
tmp=compare(pa->data ,pb->data);
if (tmp==-1 ||tmp == 0)
{ pt->data=pa->data ; pa=pa->next ; }
else //tmp==-2
{ pt->data=pb->data ; pb=pb->next ; }
pc->next =pt; pt->next =NULL; //插入Lc表尾
pc=pc->next;
}
pa=pa?pa:pb;
while (pa)//不空的表,剩余元素插入Lc
{
pt=(LNode*)malloc(sizeof(LNode));
pt->data=pa->data ;
pc->next =pt; pt->next =NULL;
pa=pa->next ; pc=pc->next;
}
return Lc;
![在这里插入图片描述](https://img-blog.csdnimg.cn/d3ad08ff79f64355a9976bff4590daa8.png)
}
循环链表
双向链表
应用实例:一元多项式的表示及相加
小结