大话数据结构
线性表
单链表
- 单链表插入
s->next = p->next;
p->next = s;
- 单链表删除
q = p->next;
p->next = q->next;
- 单链表整表创建
1.头插法
p->next = (*L)->next;
(*L)->next = p;
2.尾插法
r->next = p;
r = p; r->next = NULL//r一直为指向尾结点的变量
- 单链表整表删除
p=(*L)->next;//*p指向第一个结点
while(p) //没到表尾
{
q = p->next;
free(p);
p=q;
}
(*L)->next=NULL;//头结点指针域为空
若线性表需要频繁查找,宜采用顺序存储结构
若需要频繁插入和删除时,宜采用单链表结构
静态链表
1.用数组描述的链表叫做静态链表,data域和cur域
2.数组第一个元素的cur用来存放备用链表第一个结点的下标,最后一个元素的cur用来存放第一个插入元素的下标,相当于头结点。
3.备用表链是未被使用的数组元素。
4.最后一个有值元素的cur为0
- 静态链表的插入操作
1.
循环链表(单循环链表)
双向链表
- 插入操作
s->prior = p;
s->next = p->next;
p->next->prior = s;
p->next = s;
- 删除操作
p->prior->next = p->next;
p->next->prior = p->prior;
栈与队列
1.队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表
栈
- 栈是限定仅在表尾进行插入和删除操作的线性表
- 出栈次序的不同。例如,1,2,3依次进栈,可能的出栈次序为321、123、213、132、231.
栈的顺序存储结构及实现
- top表示栈顶元素在数组中的位置。空栈时top=-1.
- push操作:
s->top++;//栈顶指针加一
s->data[s->top]=e;//将新插入元素赋值给栈顶空间
- pop操作
*e=s->data[s->top];//将要删除的栈顶元素赋值给e
s->top--;//栈顶指针减一
两栈共享空间(两个具有相同数据类型的栈)
让一个栈的栈底为数组的始端,即下标为0处(top1),另一个栈的栈底为数组的末端,即下标为数组为长度n-1处(top2)。当栈满时满足,top1+1=top2
- push操作
if(s->top1+1==s->top2)//栈已满
return error;
if(stackNumber==1)//栈1元素进栈
s->data[++s->top1]=e;//先top+1后再赋值
else if(stackNumber==2)//栈2元素进栈
s->data[--s->top2]=e;//先top2-1后再赋值
栈的链式存储结构及实现(简称链栈)
- -