队列

作者在 2008-11-09 08:54:18 发布以下内容
 (一)采用的数据描述为:循环队列采用顺序结构
#define MAXQSIZE 100/*循环队列的最大长度*/ 最多能放99个
 typedef struct{int base[MAXQSIZE]; /*存放元素的数组空间*/
  int front; /*“头指针”*/
  int rear; /*“尾指针”*/
  }Sqqueue;
  1、入队
   Squeue enqueue(Sqqueue Q,int x) /*在循环队列Q中,插入新元素使其成为队尾元素*/
   { if ((Q.rear+1)%MAXQSIZE==Q.front) printf("ERROR");/*若队列满,插入操作出错*/
   Q.base[Q.rear]=x;/*新元素成为队尾元素*/
   Q.rear=(Q.rear+1)%MAXQSIZE;/*利用模运算,“尾指针”加1*/
   return Q; }
  2、出队
  Squeue dequeue(Sqqueue Q)/*在循环队列Q中,删除Q的队首元素*/
  { if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
  x=Q.base[Q.front];/*取队首元素*/
  Q.front=(Q.front+1)%MAXQSIZE;/*利用模运算,“头指针”加1*/
  return Q;}
  3、队列长度
  int queuelength(Squeue Q)

  {return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;}

(二)采用的数据描述为:队列采用链式结构(带有头结点)

  typedef struct QNODE{int data;
  struct QNODE *next;
  }QNODE,*Queueptr;
  typedef struct{Queueptr front; 
  Queueptr rear;
  }Linkqueue;
  1、初始化
   Linkqueue init(linkqueue Q)
   {Q.Front=Q.Rear=(Queueuptr)malloc(sizeof(QNODE));
    if(!Q.front)printf("OVERFLOW");
    Q.Front->next;
     return Q;}
  2、入队
   Squeue enqueue(Sqqueue Q,int x) /*队列Q中,插入新元素使其成为队尾元素*/
   { p=(Queueptr)malloc(sizeof(QNODE));
    if (!p) printf("OVERFLOW");/*若队列满,插入操作出错*/
    p->data=x;/*新元素成为队尾元素*/
    P->next=NULL; Q.rear=p;/*使尾指针总是指向最后一个元素的后一个*/
    return Q; }
  3、出队
   Squeue dequeue(Sqqueue Q)/*队列Q中,删除Q的队首元素*/
    { if (Q.front==Q.rear) printf("ERROR");/*若队列空,删除操作出错*/
     P=Q.rear->next;/*取队的第一个元素*/
     Q.front->next=p->next;/*删除第一个元素*/
     if(Q.rear==p)Q.rear=Q.front;/*当p指向尾指针*/
     free(p);
     return Q;} 

数据结构 | 阅读 2367 次
文章评论,共0条
游客请输入验证码
浏览77309次