今天学了链表,栈,队列,堆。我自认为会了一点。
链表:和数组不太一样。它的数据是不一定连续的。
遍历元素:for(i=first[10];i!=0;i=next[i])
cout<<d[i]<<endl;
插入元素:next[px]=next[pa]; next[pa]=px;
删除元素:next[pa]=next[px]; next[px]=0;
栈是像是一个桶:先进后出。
访问当前栈顶元素:s[top]
新的元素x入栈:++top;s[top]=x;
栈顶元素出栈:--top;
队列是先进先出的。
访问当前队首元素:q[head+1];
新的元素X入队列:++tail;q[tail]=x;
队头元素出队列:++head;
普通队列: 环形队列:
队空: head=tail;
队满: tail=n-1; head=(tail+1)%n;
队尾插入x:++tail;q[tail]=x; tail=(tail+1)% n;
实际容量: tail-head; (n+tail-head)%n;
堆差不多是个完全二叉树吧。
调整:
void heapify(int x)
{
int child=x*2;
while(child<=n)
{
if(child<n && h[child+1]<h[child]) child++;
if(h[x]>h[child])
{
swap(h[x],h[child]);
x=child;
child=x*2;
}
else
break;
}
建堆:
void build()
{
int i;
for(i=n/2;i>=1;i--)
heapify(i);
}
删除堆首元素:void delete()
{
if(n==1)
n=0;
else
{
h[1]=h[n--];
heapif(1);
}
}
void insert(int key)
{
int x=++n;
while(x>1)
{
if(key<h[x/2])
{
h[x]=h[x/2];
x/=2;
}
else
break;
}
h[x]=key;
}
但hash还没弄懂。
而且我考试终于有分了!!! 140分。加油,努力保持