利用链式队列输出杨辉三角形和算法输出杨辉三角形

链式队列

头文件

#ifndef _SEQUENCEQUEUE_H
#define _SEQUENCEQUEUE_H

#include <stdio.h>
#include <stdlib.h>

#define SIZE    1000

#define SUCCESS   10000
#define FAILURE   10001
#define TRUE      10002
#define FALSE     10003

struct queue
{
	int data[SIZE];
	int front;            //队头指针(下标)
	int rear;             //队尾指针
};
typedef struct queue Queue;

int InitQueue(Queue *q);
int EnterQueue(Queue *q, int e);
int GetFront(Queue q);
int LengthQueue(Queue q);
int DeleteQueue(Queue *q);

#endif

main函数

#include <stdio.h>
#include "SequenceQueue.h"
#include <stdlib.h>

void Traverse(Queue q)
{
	int i;
	for(i = q.front; i != q.rear; i++)
	{
		if (q.data[i] != 0)
		{
			printf("%d ", q.data[i]);
		}
	}
	printf("\n");
}

int main()
{	
	int ret, num, i, top;
	Queue q1, q2;

	if (InitQueue(&q1) != SUCCESS || InitQueue(&q2) != SUCCESS)
	{
		printf("Init Failure!\n");
		exit(1);
	}

	printf("Plesae input line:\n");
	scanf("%d", &num);

	for (i = 0; i < num; i++)
	{
		if (i == 0)
		{
			EnterQueue(&q1, 0);
			EnterQueue(&q1, 1);
			EnterQueue(&q1, 0);
		}
		else
		{
			while (LengthQueue(q1) != 1)
			{
				top = DeleteQueue(&q1);
				EnterQueue(&q2, top + GetFront(q1));
			}
			while (LengthQueue(q2) != 0)
			{
				EnterQueue(&q1, DeleteQueue(&q2));
			}
			EnterQueue(&q1, 0);
		}
		Traverse(q1);	
	}
	return 0;
}

 自定义函数

#include "SequenceQueue.h"

int InitQueue(Queue *q)
{
	if (NULL == q)
	{
		return FAILURE;
	}

	q->rear = q->front = 0;   //初始化空队

	return SUCCESS;
}


int EnterQueue(Queue *q, int e)
{
	if (NULL == q)
	{
		return FAILURE;
	}

	if ((q->rear + 1) % SIZE == q->front)   //队满
	{
		return FAILURE;
	}

	q->data[q->rear] = e;
	q->rear = (q->rear + 1) % SIZE;

	return SUCCESS;
}

int GetFront(Queue q)
{
	if (q.rear == q.front)
	{
		return FAILURE;
	}

	return q.data[q.front];
}

int LengthQueue(Queue q)
{
	return (q.rear - q.front + SIZE) % SIZE;
}

int DeleteQueue(Queue *q)
{
	if (NULL == q)
	{
		return FAILURE;
	}
	if (q->rear == q->front)
	{
		return FAILURE;
	}

	int e = q->data[q->front];
	q->front = (q->front + 1) % SIZE;

	return e;
}

结果:

[root@localdomain SequenceQueue]# ./triangle
Plesae input line:
8
1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 

 算法实现杨辉三角

思路:

源代码

#include<stdio.h>

int main()
{
    int i, j, n = 13;  //若超过13行,linux输出的格式就不是三角形
    printf("N=");
    while(n > 12)
    {
        scanf("%d", &n);    //输入正确值保证屏幕输出正确的图形
    }
    for( i = 0; i <= n; i++)//控制输出N行
    {
        for( j = 0; j < 12-i; j++)
            printf("   ");         //控制输出第i行前面的空格
        for( j = 1; j < i+2; j++)
            printf("%6d", c(i , j)); //输出第i行的第j个值
        printf("\n\n");
    }
    return 0;
}

int c(x , y)         //求杨辉三角形中第x行第y列的值
    int x , y;
{
        int z;
        if((y == 1) || (y == x + 1)) //若为x行的第一或者第x+1列,输出1
            return (1);
        z = c(x-1 , y-1) + c(x-1 , y);//否则,其值为前面一行中第y-1列与第y列值的和
        return(z);
}

运行结果

[root@localdomain 9]# ./9
N=8
                                         1

                                      1     1

                                   1     2     1

                                1     3     3     1

                             1     4     6     4     1

                          1     5    10    10     5     1

                       1     6    15    20    15     6     1

                    1     7    21    35    35    21     7     1

                 1     8    28    56    70    56    28     8     1

猜你喜欢

转载自blog.csdn.net/wow66lfy/article/details/81569419
今日推荐