链队列与堆栈操作

来源:互联网 发布:西北师范大学知行学院 编辑:程序博客网 时间:2024/06/06 07:31

问题描述]
   有一批整数,将它们进入以空队列(链队列)


#include <stdio.h>
#include <stdlib.h>
 typedef struct Qnode
 { int  data;
 struct Qnode *next;
 } QueueNode;
  
 
 
 typedef struct
   {QueueNode *front,*rear;
   }LinkQueue;
     typedef struct Snode
  {  int  data;
  struct Snode*next;
  } StackNode;

 
 
typedef StackNode *LinkStack;
LinkQueue InitQueue()
{LinkQueue q;
QueueNode *p;
p=(QueueNode*)malloc(sizeof(QueueNode));
p->next=NULL;
q.front=q.rear=p;
return(q);}

int QueueEmpty(LinkQueue q)
{  return(q.front==q.rear);
}
 
 void AddQueue(LinkQueue *q,int e)
 { QueueNode *p;
 p=(QueueNode*)malloc(sizeof(QueueNode));
 p->data=e;
 p->next=NULL;
 q->rear->next=p;
 q->rear=p;}

 

 int DeleteQueue(LinkQueue *q)
 {  int e;
 QueueNode *p;
 if (QueueEmpty(*q))
 return(0);
 else
 {
  p=q->front->next;
 q->front->next=p->next;
 e=p->data;
 if(q->rear==p)   q->rear=q->front;
 free(p);
 return(e);
 }   }

 

LinkStack StackInit()
{ LinkStack  s;
s=(LinkStack)malloc(sizeof(StackNode));
s->next=0;
return s;}

 

int StackEmpty(LinkStack s)
{ if(s->next )
return(0);
else
return(1);}

 

void Push(LinkStack  s, int e)
{StackNode*p;
p=(StackNode*)malloc(sizeof(StackNode));
p->data=e;
p->next=s->next;
s->next=p;}
 


int Pop(LinkStack s)
{  int e;
  StackNode *p;
  if(StackEmpty(s))
   return(0);
    else
 {p=s->next;
 s->next=p->next;
 e=p->data;
 free(p);
 return(e);
}
}

 

 main()
 {   int x;
 LinkQueue *q;
 LinkStack s;
 q=(LinkQueue*)malloc(sizeof(LinkQueue));
 *q=InitQueue();
 s=StackInit();
 printf("  enter the  values:");
 scanf("%d",&x);
 printf("enter the values:");
 
 while(x!=0)
 {Push(s,x);
 AddQueue(q,x);
 scanf("%d",&x);

 }

 printf ("the values out of the queue:/n");
   while(!QueueEmpty(*q))
    printf("%d   ",DeleteQueue(q));
   printf("/n The value out of the stack:/n");
     while(!StackEmpty(s))
   printf("%d ", Pop(s) );
 }

原创粉丝点击