【数据结构与算法】基本数据结构——队列的顺序表示

以下为操作队列的算法,该队列为静态队列,用循环数组实现。
给该队列分配的内存长度为len+1,但实际只用了len个内存空间来保存数据,这样做是为了更方便判断队列的满与空。队列中front位置中存放的是队首的数据,rear位置的前一个位置中存放队尾的数据,而rear位置中则没有数据存放,这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况

操作系统:ubuntu
编译软件:gcc
结果截图:
源代码:
#include
#include
#include


int len;//全局变量,静态队列的实际有效长度,即实际存放了len个数
typedef struct Queue
{
int *pBase;
int front;
int rear;
} QUEUE,*PQUEUE;


PQUEUE creat_queue();
bool enter_queue(PQUEUE,int);
bool full_queue(PQUEUE);
bool empty_queue(PQUEUE);
void traverse_queue(PQUEUE);
bool out_queue(PQUEUE,int *);


int main()
{ //创建静态队列,并定义出队数据的保存在变量data_save中
int data_save;
PQUEUE pQueue = creat_queue();
//将数据入队,并遍历输出队列中的数据
enter_queue(pQueue,1);
enter_queue(pQueue,2);
enter_queue(pQueue,3);
enter_queue(pQueue,4);
        traverse_queue(pQueue);
//将数据出队,并遍历输出队列中的数据
out_queue(pQueue,&data_save);
        traverse_queue(pQueue);


return 0;
}


//创建并初始化一个空的静态队列,返回指向该队列的指针,此时首尾在队列同一位置处


PQUEUE creat_queue()
{
printf("Input the length of the queue:\n");
scanf("%d",&len);
PQUEUE pQueue = (PQUEUE)malloc(sizeof(QUEUE));
pQueue->pBase = (int *)malloc(sizeof(int)*(len+1));
if(NULL==pQueue || NULL==pQueue->pBase)
{
  printf("malloc failed!");
  exit(-1);
}
else
{
  pQueue->front = 0;
  pQueue->rear = 0;
}
return pQueue;
}


//判断该静态队列是否满
bool full_queue(PQUEUE pQueue)
{
if(pQueue->front == (pQueue->rear+1)%(len+1))
  return true;
else
  return false;
}


//判断该静态队列是否空
bool empty_queue(PQUEUE pQueue)
{
if(pQueue->front == pQueue->rear)
  return true;
else
  return false;
}


//将变量val从队尾入队
bool enter_queue(PQUEUE pQueue,int val)
{
if(full_queue(pQueue))
  return false;
else
{
  pQueue->pBase[pQueue->rear] = val;
  pQueue->rear = (pQueue->rear+1)%(len+1);
  return true;
}
}


//将数据出队,并将其保存在out_data指针指向的位置
bool out_queue(PQUEUE pQueue,int *out_data)
{
if(empty_queue(pQueue))
  return false;
else
{
  *out_data = pQueue->front;
      pQueue->front = (pQueue->front+1)%(len+1);
  return true;
}
}


//遍历该静态队列,并自队首向队尾输出队列中的数据


void traverse_queue(PQUEUE pQueue)
{
int i = pQueue->front;
printf("now datas in the queue are:\n");
while(i != pQueue->rear)
{
  printf("%d ",pQueue->pBase[i]);
  i = (i+1)%(len+1);
}
printf("\n");
return ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值