zoukankan      html  css  js  c++  java
  • 链式队列模板

    #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("
    ");
        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
    ",e);//输出队首元素
    
    
        print(q);
        printf("%d
    ",get_len(q));
        dequeue(q,e);
         enqueue(q,10);
         print(q);
         printf("%d
    ",get_len(q));
            int flag=qempty(q);//判断是否为空时候使用
        printf("%d
    ",flag);
         clearqueue(q);//清空队列时候使用
        return 0;
    }
  • 相关阅读:
    iOS: 复选框使用---第三方框架SSCheckBoxView-master
    iOS: 使用故事板和xib设置按钮圆角方法
    iOS:详解MJRefresh刷新加载更多数据的第三方库
    万不要忽视身体发出的九大求救讯号
    MapX小试
    Nginx -HTTP和反向代理服务器简单配置
    Mapinfo修改道路方向
    This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in问题
    世界上超难找的药方
    合并apk和odex 为完整的apk安装文件
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/5037752.html
Copyright © 2011-2022 走看看