C语言写 栈队列(先进先出的)
推荐于2017-11-28
展开全部
#include<stdio.h>
#include<malloc.h>typedef struct node /*定义新类型结构体结点*/
{
int data;/*数据成员可以是多个不同类型的数据*/
struct node *next;/*指针变量成员只能是一个*/
}NODE;/*节点结束*/typedef struct qnode /*定义结点类型的变量名*/
{
NODE *front;/*设定结点头指针变量*/
NODE *rear;/* 设定结点尾指针变量*/
}QNODE; /* 链队列的结点定义 */ void InitQueue(QNODE *Q)/*定义指针Q*/
{
NODE *p;/*定义指针p*/
p=(NODE *)malloc(sizeof(NODE));/*分配结点字节的容量*/
Q->front=p; /*指定头指针p*/
Q->front->next=NULL;/*建立空队列*/
Q->rear=Q->front;/*改变Q的值*/
printf("The init is complete!");}
void *QueuePush(QNODE *Q)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));/*分配结点字节的容量*/
printf("Please input a number :");/*请输入一个数*/
scanf("%d",&p->data);/*给第一个结点赋值*/
p->next=NULL;/*指定尾结点*/
Q->rear->next=p;/*指定尾新结点p的地址*/
Q->rear=p;/*指定队尾结束*/
printf("The %d has been pushed into the Queue!",p->data);/*显示数据成员*/
return 0;/*程序结束*/
}
void *QueuePop(QNODE *Q)
{
NODE *p;/*定义结点指针*/
if(Q->front->next==NULL) return 0;/*判断对前是否为空,如果是就结束*/
p=Q->front->next;/*指向下以个成员*/
Q->front->next=p->next;/*依次向下循环*/
if(Q->rear==p) Q->rear=Q->front;/*队尾与对头相同*/
printf("The %d has been pop from the queue! \n",p->data);/*显示队列成员*/
free(p);
return 0;
}
void *PrintQueue(QNODE *Q)
{
NODE *p;/*定义链结点*/
p=Q->front->next;/*指定对头*/
while(p!=NULL)/*如不为空*/
{
printf("%5d",p->data);/*显示数据成员*/
p=p->next;/*指定第二个成员*/
}
return 0;
} void main()
{
QNODE *T;
int i=0;/*取值*/
printf("1.InitQueue 2.QueuePush 3.QueuePop 4.PrintQueue 5.Quit \n");
while(i!=5)
{
printf("Please choose the gongneng:");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 1: InitQueue(T); printf("\n"); break;
case 2: QueuePush(T); printf("\n"); break;
case 3: QueuePop(T); printf("\n"); break;
case 4: printf("The queue's numbers are:");
PrintQueue(T); printf("\n"); break;
case 5: printf("\n"); break;}
}
}
#include<malloc.h>typedef struct node /*定义新类型结构体结点*/
{
int data;/*数据成员可以是多个不同类型的数据*/
struct node *next;/*指针变量成员只能是一个*/
}NODE;/*节点结束*/typedef struct qnode /*定义结点类型的变量名*/
{
NODE *front;/*设定结点头指针变量*/
NODE *rear;/* 设定结点尾指针变量*/
}QNODE; /* 链队列的结点定义 */ void InitQueue(QNODE *Q)/*定义指针Q*/
{
NODE *p;/*定义指针p*/
p=(NODE *)malloc(sizeof(NODE));/*分配结点字节的容量*/
Q->front=p; /*指定头指针p*/
Q->front->next=NULL;/*建立空队列*/
Q->rear=Q->front;/*改变Q的值*/
printf("The init is complete!");}
void *QueuePush(QNODE *Q)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));/*分配结点字节的容量*/
printf("Please input a number :");/*请输入一个数*/
scanf("%d",&p->data);/*给第一个结点赋值*/
p->next=NULL;/*指定尾结点*/
Q->rear->next=p;/*指定尾新结点p的地址*/
Q->rear=p;/*指定队尾结束*/
printf("The %d has been pushed into the Queue!",p->data);/*显示数据成员*/
return 0;/*程序结束*/
}
void *QueuePop(QNODE *Q)
{
NODE *p;/*定义结点指针*/
if(Q->front->next==NULL) return 0;/*判断对前是否为空,如果是就结束*/
p=Q->front->next;/*指向下以个成员*/
Q->front->next=p->next;/*依次向下循环*/
if(Q->rear==p) Q->rear=Q->front;/*队尾与对头相同*/
printf("The %d has been pop from the queue! \n",p->data);/*显示队列成员*/
free(p);
return 0;
}
void *PrintQueue(QNODE *Q)
{
NODE *p;/*定义链结点*/
p=Q->front->next;/*指定对头*/
while(p!=NULL)/*如不为空*/
{
printf("%5d",p->data);/*显示数据成员*/
p=p->next;/*指定第二个成员*/
}
return 0;
} void main()
{
QNODE *T;
int i=0;/*取值*/
printf("1.InitQueue 2.QueuePush 3.QueuePop 4.PrintQueue 5.Quit \n");
while(i!=5)
{
printf("Please choose the gongneng:");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 1: InitQueue(T); printf("\n"); break;
case 2: QueuePush(T); printf("\n"); break;
case 3: QueuePop(T); printf("\n"); break;
case 4: printf("The queue's numbers are:");
PrintQueue(T); printf("\n"); break;
case 5: printf("\n"); break;}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询