队列
本章知识结构图
顺序队列的结构类型
#define maxlen 100
typedef struct{
Datatype data[maxlen];
int front;
int rear;
}SeQueue;
循环队列置空队算法
SeQueue *InitSeQueue(SeQueue *Q){
Q->front=0;
Q->rear=0;
return Q;
}
建空循环队列
SeQueue *SetQueue(){
SeQueue *Q;
Q=(SeQueue *)malloc(sizeofSeQueue);
Q->front=0;
Q->rear=0;
return Q;
}
循环队列判队满
int QueueFull(SeQueue *Q){
if(Q->front==(Q->rear+1)%maxlen)
return 1;
else
return 0;
}
循环队列判队空
int QueueEmpty(SeQueue *Q){
if(Q->front==Q->rear)
return 1;
else
return 0;
}
循环队列入队
void Add(SeQueue *Q,Datatype x){
if(!QueueFull(Q)){
Q->rear=(Q->rear+1)%maxlen;
Q->data[Q->rear]=x;
}
else
printf("queue full");
}
循环队列出队
void Delete (SeQueue *Q){
if(!QueueEmpty)
Q->front=(Q->front+1)%maxlen;
else
printf("queue empty");
}
链队列结构类型
typedef struct node{
datatype data;
struct node *next;
}LinkList;
typedef struct{
LinkList *front;
LinkList *rear;
}LinkQueue;
LinkQueue *Q;
链队列建空队
LinkQueue *SetQueue(){
LinkQueue *Q;
Q=(LinkQueue *)malloc(sizeof(LinkQueue));
Q->front=NULL;
Q->rear=NULL;
return Q;
}
链队列判队空
int QueueEmpty(LinkQueue *Q){
if(Q->front==null)
return 1;
else
return 0;
}
链队列入队
LinkQueue *Add(LinkQueue *Q,Datatype x){
LinkList *p;
p=(LinkQueue *)malloc(sizeof(LinkList));
p->data=x;
p->next=NULL;
if(Q->front==NULL)
Q->front=p;
else
Q->rear->next=p;
Q->rear=p;
return Q;
}
链队列出队
LinkQueue *Delete(LinkQueue *Q){
LinkList *p;
if(!QueueEmpty(Q)){
p=Q->front;
Q->front=p->next;
if(p->next=NULL)
Q->rear=Q->front;
free(p);
return Q;
}
else
printf("queue empty");
}
链队列置空队
LinkQueue *InitStack(LinkQueue *LS){
while(Q->front!=NULL)
Q=Delete(Q);
return (Q);
}
打印杨辉三角
void yanghui(int n) //打印n行
{
int s=0,t,j;
Queue *Q;
Init(Q);
cout<<1<<endl;
Add(Q,1);
for(int i=2;i<=n;i++){
Add(Q,0);
for(j=i;j<=i;j++){
t=Delete(Q);
cout<<s+t;
Add(Q,s+t);
s=t;
}
cout<<endl;
}
}