数据结构代码实现(链队列)

来源:互联网 发布:我家我设计软件 编辑:程序博客网 时间:2024/06/01 09:46
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct QNode
{
 int date;
 QNode *pNext;
}QNode,*pQNode;
typedef struct Queue
{
 pQNode front;
 pQNode rear;
}LinkQueue,*pLinkQueue;
bool init_LinkQueue(pLinkQueue);
bool en_LinkQueue(pLinkQueue,int);
bool traverse_LinkQueue(pLinkQueue);
bool is_empty(pLinkQueue);
bool de_LinkQueue(pLinkQueue,int *);
bool DestroyQueue(pLinkQueue);
int main()
{
 LinkQueue q;
 int val;
 init_LinkQueue(&q);
 en_LinkQueue(&q,3);
 en_LinkQueue(&q,2);
 en_LinkQueue(&q,1);
 de_LinkQueue(&q,&val);
 printf("delete is %d\n",val );
 traverse_LinkQueue(&q);

 return 0;
 }
bool init_LinkQueue(pLinkQueue pQ)
{
pQ->front=pQ->rear=(pQNode)malloc(sizeof(QNode));//head node
  if(NULL==pQ->front)
    {
 exit(-1);
 return false;
   }
  else
    return true;
}

bool en_LinkQueue(pLinkQueue pQ,int val)
{
 
  pQNode New;
  New=(pQNode)malloc(sizeof(QNode));
  if(NULL==New)
  {
   exit(-1);
   return false;
  }
  New->date=val;
  pQ->rear->pNext=New;
  pQ->rear=New;
  return true;

}
bool is_empty(pLinkQueue pQ)
{
 if(pQ->front==pQ->rear)
  return true;
 else
  return false;
}
bool traverse_LinkQueue(pLinkQueue pQ)
{
 if(is_empty(pQ))
 {
  printf("LinkQueue is empty \n");
  return false;
 }
 else
 {
  pQNode p=pQ->front;
  while(p!=pQ->rear)
  {
   printf("%d  ",p->pNext->date );
   p=p->pNext;
  }
 }
 return true;

}

bool de_LinkQueue(pLinkQueue pQ,int * val)
{
 if(is_empty(pQ))
 {
  printf("pLinkQueue is empty");
  return false;
 }
 else
 {
  pQNode p=pQ->front->pNext;//delete postion
  *val=p->date;
  pQ->front->pNext=p->pNext;
  if(pQ->rear==p)
   pQ->rear=pQ->front;//finally element
  free(p);
  
  return true;
 }
}

bool DestroyQueue(pLinkQueue pQ)
{
 while (pQ->front)
 {
  pQ->rear=pQ->front->pNext;
  free(pQ->front);
  pQ->front=pQ->rear;
 }
 return true;

}
阅读全文
0 0
原创粉丝点击