20天集训——day16

今天讲的是基本的数据结构,讲了链表,栈,队列,堆,STL的部分模板使用。

链表:是一种没有天生顺序关系的“数组”,是一种把零散的数据串起来的数据结构,它不依靠下标这种天生存在的数据关系串联数据,而是利用专门记录每个数据前后是哪个数据,把所有数据联系起来。专门记录每个数据前后是哪个数据是其方便插入和删除数据。但不方便其遍历。当开数组记录数据时有较多的空余,浪费,但又必须开这么大时,也可以用链表。

遍历元素:遍历链表1

for(int i=f[1];i!=0;i=a[i].z)
    cout<<a[i].y<<endl;

插入元素:

next[px]=next[pa];
next[pa]=px;

删除元素:

next[pa]=next[px];
next[px]=0;

栈:栈是一种先进后出的容器先存进栈的元素比后存进栈的元素后出。

访问当前栈顶元素: s[top];

元素进栈:++top; s[top]=x;

栈顶元素出栈:--top;

队列:是一种先进先出的容器,先存进队列的元素比后存进队列内的元素先取出。要用两个变量记录队列的头和尾。

访问当前队首元素:q[head+1]

新的元素入队:++tail; q[tail]=x;

队头元素出队:++head;

普通队列:

队空条件: head=tail;

队满条件:tail=n-1;

队尾插入x:++tail; q[tail]=x;

队头出队:++head;

实际容量:tail-head;

环形队列:

对空条件:head=tail;

队满条件:(tail+1)%n=head;

队尾插入x:tail=(tail+1)%n; q[tail]=x;

队头出队:head=(head+1)%n;

实际容量:(n+tail-head)%n;

堆:是父亲值总比儿子值大或父亲值总比儿子值小的完全二叉树。按父亲、儿子数值的比较关系分为“大根堆”和“小根堆”。适合用于频繁查找序列中最值的问题。

调整:

void h(int x)
{
 int child=x*2;
 while(child<=n)
 {
  if(child<n&&a[child+1]<a[child]) child++;
  if(a[x]>a[child])
  {
   swap(a[x],a[child]);
   x=child;
   child=x*2;
  }
  else break;
 }
}

建堆:

void b()
{
 int i;
 for(int i=n/2;i>=1;i--)
  h(i);
}

删除堆首元素:

void d()
{
 if(n==1)
  n=0;
 else
 {
  a[1]=a[n--];
  h[1];
 }
}

插入新元素:

void intn(int k)
{
 int x+=++n;
 while(x>1)
 {
  if(k<a[x/2])
  {
   a[x]=a[x/2];
   x/=2;
  }
  else break;
 }
 a[x]=k;
}

STL的部分模板使用还是上网查吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值