队列的基本操作

仅在表尾入队,在表头出队

顺序队列

用一维数组

定义节点类型

#define MAXQSIZE 100 //最长队列长度

typedef struct{

QElemType *base;

int front,rear; //头指针和尾指针

}SqQueue;

初始化:front=reae=0;

入队: base[rear]=e; rear++;

出队: x=base[front]; front++;

表示队空:front==rear;

表示队满:rear=MAXQSIZE;

循环队列(%运算)

解决假上溢问题

插入元素 Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE;

删除元素 x=Q.base[s.front]; Q.front=(Q.front+1)%MAXQSIZE;

判断队空 rear==firont;

判断队满 (rear+1)%MAXQSIZE==front; //如果尾指针再加一与头指针,则队满

(少用一个空间)

队列的初始化

Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType)); //分配空间

if(!Q.base) return ERROR;内存分配失败

Q.front= Q.rear=0;

return OK;

求队列的长度 return ( (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE );

循环队列的入队

if((Q.rear+1)%MAXQSIZE==Q.front)  return ERROR;  //判断队满

Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

return OK;

循环队列的出队

if(Q.front==Q.rear)   return ERROR;    //判断队空

e=Q.base[Q.front];   //保存队头元素

Q.front=(Q.front+1)%MAXQSIZE;

return OK;

取队头元素       if(Q.front!=Q.rear) return Q.base[Q.front];   //队头指针不变

链队

 定义节点类型

#define MAXQSIZE 100 //最长队列长度

typedef struct Qnode{

QElemType   data;      //存储数据

str=ruct Qnode *next;     //存取下一节点的地址

}QNode,*QueuePtr;

typedef struct{

QueuePtr front;   //队头指针

QueuePtr rear;    //队尾指针

}LinkQueue;

空队列  Q.front=Q.rear;

链队列的初始化

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front)  return ERROR;

Q.front->next=NULL;

return OK;

链队列的销毁

while(Q,.front){

        Q.rear=Q.front->next;  free(Q.front);  Q.front=Q.rear;       }

return OK;

链队列的入队

p=(QueuePtr)malloc(sizeof(QNode)  );

if(!p) return ERROR;

 p->data;   p->next=NILL;

Q.rear->next=p;             Q.rear=p;

return OK;

链队列的出队

if(Q.front==Q.rear) return ERROR;

 p=(QueuePtr)malloc(sizeof(QNode)  );

p=Q.front->next;               e=p->data;

Q.front->next=p->next;         

if(Q.rear==p)  Q.rear=Q.front;

free(p);

return OK;

链队列取队头元素

if(Q.front==Q.rear)  return ERROR;

e=Q.front->next->data;

return OK;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nuo__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值