《大话数据结构》

大话数据结构



线性表

单链表

  • 单链表插入
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后再赋值
栈的链式存储结构及实现(简称链栈)
  • -
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值