队列的基本操作:建立,入队,出队,遍历。2017-3-28-8-52
#include<stdio.h>
#include<stdlib.h>
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; //队列头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//函数定义.....................
int InitQueue(LinkQueue *Q);
int Push(LinkQueue *Q,int e);
int Delete_Queue(LinkQueue *Q,int *e);
int shownumbers(LinkQueue Q,int n);
//函数实现...........................
int InitQueue(LinkQueue *Q)
{
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)); //头结点的建立和头指针,为指针的建立
if(!Q->front)
exit(-1);
Q->front->next = NULL;
return 1;
}
int Push(LinkQueue *Q,int e)
{
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p)
exit(-1);
p->data = e;
p->next = NULL;
// printf("%d",p->data);
Q->rear->next = p;
Q->rear = p;
return 1;
}
int Delete_Queue(LinkQueue *Q,int *e)
{
QueuePtr p;
if(Q->front == Q->rear)
return 0;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if(Q->rear == p)
Q->rear = Q->front;
free(p);
return 1;
}
int shownumbers(LinkQueue Q,int n)
{
QueuePtr p;
p = Q.front->next;
for(int i=0;i<n;i++)
{
if(Q.front == Q.rear)
{
printf("\n已经没有元素了\n");
return 1;
}
printf("%-4d",p->data);
p = p->next;
}
return 1;
}
//入口函数.................
int main()
{
LinkQueue Q;
int n;
int e;
InitQueue(&Q);
printf("请输入初始化几个元素:\n"); //初始化
scanf("%d",&n);
printf("请输入初始化的元素:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&e);
Push(&Q,e);
}
// Delete_Queue(&Q,&e);
shownumbers(Q,n);
printf("\n请输入插入的元素:");
scanf("%d",&e);
Push(&Q,e);
n++;
shownumbers(Q,n);
printf("\n出队列:");
n--;
Delete_Queue(&Q,&e);
shownumbers(Q,n);
return 0;
}