码迷,mamicode.com
首页 > 其他好文 > 详细

链式队列模板

时间:2015-12-11 01:23:42      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
typedef int elemtype;
typedef struct qnode{
    elemtype data;
    struct qnode *next;
}qnode,*ptr;
typedef struct {
    ptr head;
    ptr tail;
}linkqueue;
status initqueue(linkqueue &q){//初始化队列

      q.head=q.tail=(ptr)malloc(sizeof(qnode));
     if(!q.head)
        exit(OVERFLOW);
        q.head->next=NULL;
        return OK;
}
status enqueue(linkqueue &q,elemtype e){//向队列插入元素
     ptr p=(ptr)malloc(sizeof(qnode));
     if(!p)
         exit(OVERFLOW);
     p->next=NULL,p->data=e;
     q.tail->next=p;
     q.tail=p;
     return OK;
}

status dequeue(linkqueue &q,elemtype &e){//删除队首元素
    if(q.head==q.tail)
        return ERROR;
    ptr p=(ptr)malloc(sizeof(qnode));
    p=q.head->next;
    e=p->data;
    q.head->next=p->next;
    if(q.tail==p)
        q.tail=q.head;
    free(p);
    return OK;
}

status destroy(linkqueue &q){//销毁队列链表
     while(q.head){
        q.tail=q.head->next;
        free(q.head);
        q.head=q.tail;
     }
     return OK;
}
int get_len(linkqueue q){//获得队列长度
  int cnt=0;
  while(q.head->next!=NULL){
       q.tail=q.head->next;
       cnt++;
       q.head=q.tail;
    }
    return cnt;
}
status print(linkqueue q){//输出线性表元素
    while(q.head->next!=NULL){
       q.tail=q.head->next;
       printf("%d  ",q.tail->data);
       q.head=q.tail;
    }
    printf("\n");
    return OK;
}
status gethead(linkqueue q,elemtype &e){//获得队首元素
    ptr p=(ptr)malloc(sizeof(qnode));
    p=q.head->next;
    e=p->data;
    return OK;
}
status qempty(linkqueue q){//判断是否为空
    if(q.head==q.tail)
        return TRUE;
    else
        return FALSE;
}
status clearqueue(linkqueue &q){ // 将q清为空队列
  ptr p1,p2;
  q.tail=q.head;
  p1=q.head->next;
  q.head->next=NULL;
  while(p1)
  {
    p2=p1;
    p1=p1->next;
    free(p2);
  }
  return OK;
}
int main(){
    linkqueue q;
    initqueue(q);
    elemtype e;
    for(int i=1;i<=5;i++){
        enqueue(q,i);
    }
    gethead(q,e);
    printf("%d\n",e);//输出队首元素


    print(q);
    printf("%d\n",get_len(q));
    dequeue(q,e);
     enqueue(q,10);
     print(q);
     printf("%d\n",get_len(q));
        int flag=qempty(q);//判断是否为空时候使用
    printf("%d\n",flag);
     clearqueue(q);//清空队列时候使用
    return 0;
}

 

链式队列模板

标签:

原文地址:http://www.cnblogs.com/13224ACMer/p/5037752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!