C语言实现队列的顺序存储

队列

 #1. 队列不得和栈比较,栈是一种先进后出的线性表,而队列是一种先进先出 (first in first out,缩写 FIFO) 的线性表.
 #2. 它只允许在表的一端进行插入,而在另一端删除元素。
 #3. 在队列中插入的一端为队尾(rear),允许删除的一端为队头(front)。
 
 
这里我们实现队列的顺序存储,
实现ADT中基本操作
Status InitQueue(SqQueueP &SQ)
Status QueueEmpty(SqQueueP SQ)  Status EnQueue(SqQueueP &SQ,ElemType e)
ElemType DeQueue(SqQueueP &SQ)     Status QueueTraverse(SqQueueP SQ){
实现如下

#include <stdio.h>
#include <malloc.h>
#define OK 1
#define Error 0
#define OVERFLOW -2
#define True 1
#define False 0
#define MAX_SIZE 15
typedef int Status; //函数运行结束状态值
typedef struct{
    int x;
}Node;
typedef Node * ElemType;
typedef struct{
    ElemType elem[MAX_SIZE];
    int size;
}SqQueue,*SqQueueP;
Status InitQueue(SqQueueP &SQ){
    SQ = (SqQueue*)malloc(sizeof(SqQueue));
    SQ->size = 0;
    return OK;
}
Status QueueEmpty(SqQueueP SQ){
    if(SQ->size==0) return True;
    return False;
}
Status EnQueue(SqQueueP &SQ,ElemType e){
    SQ->elem[SQ->size] =e;
    SQ->size++;
    return OK;
}
ElemType DeQueue(SqQueueP &SQ){
	ElemType e;
	if(SQ->size > 0){
		e = SQ->elem[0];
		for(int i = 0; i < SQ->size-1; i++){
			SQ->elem[i] = SQ->elem[i+1];
		}
		SQ->size--;
	}
	return e;
}
Status QueueTraverse(SqQueueP SQ){
    for(int i = 0; i < SQ->size; i++){
        if(SQ->elem[i]) printf("%d",SQ->elem[i]->x);
        else printf("NULL");
    }
    return OK;
}
int main() {
    SqQueueP sq;
    InitQueue(sq);
    Node *pn1 = NULL;
    Node *pn2  = (Node *)malloc(sizeof(Node));
    pn2->x = 1;
    EnQueue(sq,pn1);
    EnQueue(sq,pn2);
    EnQueue(sq,pn1);
    EnQueue(sq,pn2);
    EnQueue(sq,pn1);
    EnQueue(sq,pn2);
    while(!QueueEmpty(sq)){
        Node *temppn = DeQueue(sq);
        if(temppn) printf(" %d ",temppn->x);
        else printf("NULL");
    }
    
    free(pn2);
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值