순환 대기 열 에 적용 되 는 양 휘 삼각형 (C 언어)
4383 단어 데이터 구조
네 가지 함수 만 사용: init, inset, delete, get.이 부분 은 상투적인 방법 이다.
#include
#include
#define MAXQSIZE 100
typedef int elemtype;
typedef struct Queue{
elemtype Queue[MAXQSIZE];
elemtype front, rear;
}Q;
void init_Q(Q*q)
{
if (!q)
{
exit(0);
}
for (int i = 0; i < MAXQSIZE; i++)
{
q->Queue[i] = 0;
}
q->front = 0;
q->rear = 0;
}
void delete_Q(Q*q, elemtype*s)
{
if (q->front == q->rear)
{
return;
}
*s = q->Queue[q->front];
q->front = (q->front + 1) % MAXQSIZE;
}
void insert_Q(Q*q, elemtype x)
{
if ((q->rear + 1) % MAXQSIZE == q->front)
{
exit(0);
}
q->Queue[q->rear] = x;
q->rear = (q->rear + 1) % MAXQSIZE;
}
void get_Q(Q*q, elemtype*e)
{
*e = q->Queue[q->front];
}
주로 사고방식 을 말 하 는데 어떻게 양 휘 삼각형 을 생 성 합 니까?
1. 선생님 이 첫 번 째 줄 이 되 고 첫 번 째 줄 은 하나 입 니 다. 바로 팀 에 들 어 갑 니 다.
2. 두 번 째 줄 이후 규칙 이 있 습 니 다. 두 번 째 줄 은 양쪽 의 1 을 제외 하고 다른 수치 가 없습니다. 세 번 째 줄 은 1 을 제외 하면 1 개의 수치 가 있 고 네 번 째 줄 은 1 을 제외 하면 2 개의 수치 가 있 습 니 다. 그래서 아래 n - 1 줄 의 생 성에 순환 을 사용 해 야 합 니 다.
3. 순환 은 무엇 을 포함 합 니까?순환 은 모든 줄 을 만 드 는 데 쓰 인 다 고 이해 할 수 있다. 그러면 먼저 생 성 된 것 은 1 이 고, 그 다음 에 이전 줄 에서 얻 은 것 과 그 다음 에 1 이다.
4. 이전 줄 에서 얻 은 것 과 이것 은 여러 개의 수치 이 고 각 줄 의 수량 이 다 르 기 때문에 이 부분 을 생 성 하려 면 순환 을 해 야 합 니 다.
5. 한 번 순환 하면 두 번 째 줄 을 생 성 할 때 첫 번 째 줄 의 1 을 더 하기 때문에 순환 의 마지막 에 이 남 은 1 을 삭제 합 니 다.그리고 인쇄 를 합 니 다. 함수 가 진행 하 는 마지막 에 인쇄 를 하 는 이상 각 줄 의 마지막 1 을 인쇄 해 야 합 니 다. 곰 곰 이 생각해 보 니 인쇄 가 적당 합 니 다.
그러면 지금 대체적인 구조 가 있다.
int x = 1;
insert_Q(q, x);//
for (int i = 2; i < n; i++)// n-1
{
insert_Q(q, x);// 1
for (j = 0; j < i - 2; j++)// 1 , j-2
{
}
insert_Q(q, x);// 1
delete_Q(q, &s);// 1
printf("%5d
", s);
}
6. 순환 에 따라 한 번 걸 어가 면 대열 의 수치 변 화 는 이러한 1, 11, 111, 11 이다.이 처 리 는 세 번 째 줄 을 만 들 었 으 나 첫 번 째 줄 의 하나 만 인쇄 되 었 습 니 다.그럼 세 번 째 줄 을 처리 할 때 두 번 째 줄 을 인쇄 하 는 것 을 고려 해 야 합 니 다.다른 줄 의 보편적 인 상황 을 고려 해 야 하기 때문에 이곳 은 어 려 운 점 이다.
7. 세 번 째 줄 을 만 들 기 전 대기 열 은 11 이 고 i 세 번 째 줄 을 만 들 기 시작 하면 순환 에 들 어가 111 이 되 며 줄 의 첫 번 째 줄 을 삭제 하고 인쇄 합 니 다. 이것 은 각 줄 의 첫 번 째 1 이 되 고 대기 열 에서 삭 제 된 1 과 삭 제 된 줄 의 첫 번 째 수 치 를 2 로 추가 합 니 다.2 를 대기 열 에 삽입 합 니 다.이 때 대기 열 은 112 입 니 다. 아래 의 삽입 을 계속 1121 로 바 꾸 고 마지막 삭 제 는 대기 열 첫 번 째 1 을 삭제 하고 인쇄 합 니 다. 이때 대기 열 은 121 이 고 11, 두 번 째 줄 을 인쇄 하여 세 번 째 줄 을 만 들 었 습 니 다.
int x = 1;
insert_Q(q, x);//
for (int i = 2; i < n; i++)// n-1
{
insert_Q(q, x);// 1
for (j = 0; j < i - 2; j++)// 1 , j-2
{
delete_Q(q, &s);
printf("%5d", s);
get_Q(q, &e);
insert_Q(q, s + e);
}
insert_Q(q, x);// 1
delete_Q(q, &s);// 1
printf("%5d
", s);
}
8. 여기 서 매우 교묘 한 것 은 한 줄 을 인쇄 하 는 동시에 대열 에 도 다음 줄 이 생 성 되 었 다 는 것 이다.따라서 for 순환 이 끝나 면 대기 열 에 한 줄 이 존재 하 므 로 줄 을 옮 겨 다 니 며 인쇄 해 야 합 니 다.
int x = 1;
insert_Q(q, x);//
for (int i = 2; i < n; i++)// n-1
{
insert_Q(q, x);// 1
for (j = 0; j < i - 2; j++)// 1 , j-2
{
delete_Q(q, &s);
printf("%5d", s);
get_Q(q, &e);
insert_Q(q, s + e);
}
insert_Q(q, x);// 1
delete_Q(q, &s);// 1
printf("%5d
", s);
}
while (q->front != q->rear)
{
delete_Q(q, &s);
printf("%5d", s);
}
전체 main 함수:
int main()
{
Q*q = (Q*)malloc(sizeof(Q));
init_Q(q);
int n, j;
int x = 1;
elemtype e, s;
printf(" :");
scanf("%d", &n);
insert_Q(q, x);//
for (int i = 2; i < n; i++)// n-1
{
insert_Q(q, x);// 1
for (j = 0; j < i - 2; j++)// 1 , j-2
{
delete_Q(q, &s);
printf("%5d", s);
get_Q(q, &e);
insert_Q(q, s + e);
}
insert_Q(q, x);// 1
delete_Q(q, &s);// 1
printf("%5d
", s);
}
while (q->front != q->rear)
{
delete_Q(q, &s);
printf("%5d", s);
}
getchar();
}
ps: 이 순환 디자인 은 정말 교묘 합 니 다. 직접 순환 을 분석 하고 이해 해 야 합 니 다.
End...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.