자주 사용 하 는 간단 한 데이터 구조: 스 택, 대기 열, 이 진 더미

9330 단어 데이터 구조

창고:
선진 후 출 의 원칙 으로 선진 스 택 의 요 소 는 스 택 밑 에 있 고 후 입 스 택 의 요 소 는 스 택 꼭대기 에 있 으 며 지침 을 표시 하면 간단 한 스 택 출 스 택 작업 을 잘 완성 할 수 있 습 니 다. 
코드 는 다음 과 같 습 니 다: 
#include <stdio.h>

#define N 10

int Stack[N];//
int Top;//

void Stack_Push(int x)//
{
Stack[Top++]=x;
return;
}

void Stack_Pop()//
{
printf("%d ",Stack[--Top]);
return;
}

int main()
{
int i,num;
for(Top=i=0;i<N;++i)
{
scanf("%d",&num);
Stack_Push(num);
}
for(i=0;i<N;++i)
{
Stack_Pop();
}
puts("");
return 0;
}
/*
Input:
9 7 8 5 6 10 4 2 1 3
Output:
3 1 2 4 10 6 5 8 7 9
*/

대기 열:
     선진 적 인 선 출 원칙 으로 선진 대열 의 요 소 는 팀 의 선두 에 있 고 후진 대열 의 요 소 는 팀 의 끝 에 있다.  한 팀 의 첫 번 째 지침 으로 한 팀 의 꼬리 지침 을 표시 하면 간단 한 입대 작업 을 잘 완성 할 수 있다.  코드 는 다음 과 같 습 니 다:
#include <stdio.h>

#define N 10

int Queue[N];//
int Head,Tail;//

void Queue_Push(int x)//
{
Queue[Tail++]=x;
return;
}

void Queue_Pop()//
{
printf("%d ",Queue[Head++]);
return;
}

int main()
{
int i,num;
for(Head=Tail=i=0;i<N;++i)
{
scanf("%d",&num);
Queue_Push(num);
}
for(i=0;i<N;++i)
{
Queue_Pop();
}
puts("");
return 0;
}
/*
Input:
9 7 8 5 6 10 4 2 1 3
Output:
9 7 8 5 6 10 4 2 1 3
*/

두 갈래 더미:
    기본 값 은 최소 더미 이 고 더 미 는 반드시 서열 성 을 확보 해 야 한다 (즉, 부모 노드 가 좌우 노드 보다 크 지 않다).쌓 일 때 먼저 빈 노드 를 만 듭 니 다. 만약 에 현재 노드 의 값 이 부모 노드 의 값 보다 작 으 면 부모 노드 를 가라앉 힙 니 다. 이 노드 는 지난번 에 부모 노드 와 비교 하여 부모 노드 보다 크 거나 뿌리 노드 가 될 때 까지 계속 비교 합 니 다.쌓 아 올 릴 때 현재 뿌리 에 빈 노드 를 만 들 고 현재 노드 와 왼쪽 과 오른쪽 노드 를 비교 하여 부모 노드 를 왼쪽 과 오른쪽 노드 보다 작 게 하고 현재 쌓 아 올 린 크기 를 초과 할 때 까지 계속 찾 으 며 현재 찾 을 수 있 는 마지막 노드 (B 로 설정) 를 기록 하고 마지막 으로 쌓 아 올 린 마지막 요 소 를 현재 찾 은 마지막 곳 (B) 에 놓는다.
코드 는 다음 과 같 습 니 다:
#include <stdio.h>

#define N 10

int Binary_Heap[N+1];//
int Size;//

void Binary_Heap_Push(int x)//
{
int Now;
Now=++Size;
while(Now>1&&x<Binary_Heap[Now>>1])//
{
Binary_Heap[Now]=Binary_Heap[Now>>1];
Now>>=1;
}
Binary_Heap[Now]=x;//
return;
}

void Binary_Heap_Pop()//
{
int Min,Now,temp;
printf("%d ",Binary_Heap[1]);
Now=1;
while((Now<<1)<=Size)
{
temp=Now<<1;//
if((temp+1)<=Size&&Binary_Heap[temp]>Binary_Heap[temp+1])//
{
++temp;
}
if(Binary_Heap[temp]<Binary_Heap[Size])//
{
Binary_Heap[Now]=Binary_Heap[temp];
}
else
{
break;
}
Now=temp;
}
Binary_Heap[Now]=Binary_Heap[Size];//
--Size;
return;
}

int main()
{
int i,num;
for(Size=i=0;i<N;++i)
{
scanf("%d",&num);
Binary_Heap_Push(num);
}
for(i=0;i<N;++i)
{
Binary_Heap_Pop();
}
puts("");
return 0;
}
/*
Input:
9 7 8 5 6 10 4 2 1 3
Output:
1 2 3 4 5 6 7 8 9 10
*/

좋은 웹페이지 즐겨찾기