数据结构---队列的实现和个人分析

 队列的一个显著的特征正好的和栈是相反的,它是按照先进先出(FIFO)的方式存储和检索元素,这就是说,对线插入队列的要先删除。还有就是队列是限制在两端进行插入和删除操作的线性表,允许进行存入操作的一端就叫“队尾”,允许进行删除操作的就是“对头”。当线性表中没有元素时,称为“空队“。那么,我们可以吧队列想象地理解成银行办理业务的一队人。

  下面介绍顺序队列的定义和实现(以前写的代码)

/*sequeue.h*/
#define N 8

typedef int datatyde;
typedef struct {
	datatyde data[N];
	int front,rear;
 }sequeue;

sequeue *Createsequeue();
int Emptysequeue(sequeue *sq);
int Fullsequeue(sequeue *sq);
void Clearsequeue(sequeue *sq);
void Ensequeue(sequeue *sq,datatyde x);
datatyde Desequeue(sequeue *sq);
/*sequeue.c
#include "sequeue.h"
#include <stdio.h>
#include <stdlib.h>



sequeue *Createsequeue()
{
	sequeue *sq;
	sq=(sequeue *)malloc(sizeof(sequeue));
  sq ->	front = sq -> rear=0;
	return sq;
}

int Emptysequeue(sequeue *sq)
{
	return (sq -> front == sq -> rear);
}
int Fullsequeue(sequeue *sq)
{
	return ((sq -> rear+1)%N == sq -> front);
}
void Clearsequeue(sequeue *sq)
{
   sq -> front = sq -> rear;
	return;
}
void Ensequeue(sequeue *sq,datatyde x)
{
	sq -> rear = (sq -> rear+1) % N;
	sq -> data[sq -> rear]=x;
}

datatyde Desequeue(sequeue *sq)
{
  sq -> front = (sq -> front + 1) % N;
 return (sq ->data[sq -> front]);
}


下面是链式队的定义和实现

 队列的定义的和实现和栈的定义和实现差不多。好多函数接口在单链表定义的时候已经实现,具体可以参照单链表的实现和定义。单链表博客链接:点击打开链接

    

/*queue.h*/

#ifndef QUEUE_H
#define QUEUE_H

#include <stdlib.h>
#include "list.h"

/*inplement as linked lists */
typedef List Queue;

/*Public inerface */
#define queue_init list_init 
#define queue_destroy list_destory 

int queue_enqueue(Queue *queue,const void *data);
int queue_dequeue(Queue *queue,void *data);
#define queue_peek(queue)  ((queue) ->head == NULL? NULL:(queue)->head->data)
#define queue_size list_size

#endif


 

/*queue.c*/

#include <stdlib.h>

#include "../include/list.h"
#include "../include/queue.h"

/*queue_enqueue */
int queue_enqueue(Queue * queue, const void * data)
{
    return list_ins_next(queue, list_tail(queue),  data);
}

/*queue_dequeue*/
int queue_dequeue(Queue * queue, void * data)
{
    return list_rem_next(queue, NULL, data);
}



 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值