利用队列的基本功能输出杨辉三角形:
#include "SequenceQueue.h"
int main()
{
int N, num, i;
Queue *que1 = NULL, *que2 = NULL, *tmp = NULL;
if(QueueInit(&que1) != SUCCESS || QueueInit(&que2) != SUCCESS)
{
printf("Init Error!\n");
return 0;
}
printf("Please input:\n");
scanf("%d", &N);
for(i = 0; i < N; i++)
{
if(0 == i)
{
Push(que1, 0);
Push(que1, 1);
Push(que1, 0);
num = 1;
printf("%4d", num);
}
else
{
Push(que2, 0);
while(1 != QueueLength(que1))
{
num = Pop(que1);
num = num + Get(que1);
Push(que2, num);
printf("%4d ", num);
}
Push(que2, 0);
tmp = que1;
que1 = que2;
que2 = tmp;
QueueClear(que2);
}
printf("\n");
}
return 0;
}
#ifndef _SEQUENCEQUEUE_H
#define _SEQUENCEQUEUE_H
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1024
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
typedef struct SequenceQueue
{
int data[SIZE];
int front;
int rear;
}Queue;
int QueueInit(Queue **queue);
int QueueEmpty(Queue *queue);
int Push(Queue *queue, int i);
int Get(Queue *queue);
int QueueLength(Queue *queue);
int Pop(Queue *queue);
int QueueClear(Queue *queue);
int QueueDestory(Queue **queue);
#endif
#include "SequenceQueue.h"
int QueueInit(Queue **queue)
{
if(queue == NULL)
{
return FAILURE;
}
*queue = (Queue *)malloc(sizeof(Queue));
if(*queue == NULL)
{
return FAILURE;
}
(*queue)->front = 0;
(*queue)->rear = 0;
return SUCCESS;
}
int QueueEmpty(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
if(queue->rear == queue->front)
{
return TRUE;
}
else
{
return FAILURE;
}
}
int Push(Queue *queue, int i)
{
if(queue == NULL)
{
return FAILURE;
}
if((queue->rear+1)%SIZE == queue->front)
{
return FAILURE;
}
queue->data[queue->rear] = i;
queue->rear++;
return SUCCESS;
}
int Get(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
return queue->data[queue->front];
}
int QueueLength(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
return (queue->rear-queue->front+SIZE)%SIZE;
}
int Pop(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
if(queue->front == queue->rear)
{
return FAILURE;
}
int e = queue->data[queue->front];
queue->front = (queue->front+1)%SIZE;
return e;
}
int QueueClear(Queue *queue)
{
if(queue == NULL)
{
return FAILURE;
}
queue->front = queue->rear = 0;
return SUCCESS;
}
int QueueDestory(Queue **queue)
{
if(queue == NULL || *queue == NULL)
{
return FAILURE;
}
free(*queue);
return SUCCESS;
}