数据结构之队列的相关操作

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//定义循环队列
typedef struct Queue{
	int *pBase;  //数组的首地址
	int front;  //指向队列的第一个有效元素
	int rear;  //指向队列最后一个有效元素的下一个节点
}*QUEUE;

//方法声明
void init_Stack(QUEUE);  //初始化队列
void entry_Queue(QUEUE,int);  //入队
bool out_Queue(QUEUE,int *);  //出队
bool is_empty(QUEUE);  //判断队列是否为空
bool is_full(QUEUE);  //判断队列是否已满
void traverse(QUEUE);  //遍历队列元素

int main(void){
	Queue qu;
	printf("初始化队列中......\n");
	init_Stack(&qu);  //初始化队列
	printf("开始入队......\n");
	entry_Queue(&qu,1);  //入队
	entry_Queue(&qu,2);
	entry_Queue(&qu,3);
	entry_Queue(&qu,4);
	entry_Queue(&qu,5);
	printf("显示队列中的元素值......\n");
	traverse(&qu);  //遍历队列元素
	printf("继续入队......\n");
	entry_Queue(&qu,6);
	printf("开始出队......\n");
	int value;
	if(out_Queue(&qu,&value)){  //出队
		printf("出队成功,被弹出的元素是: %d\n",value);
	}else{
		printf("出队失败!\n");
		exit(-1);
	}
	printf("出队后,队列中剩余的元素值......\n");
	traverse(&qu);
	return 0;
}

//初始化队列
void init_Stack(QUEUE queue){
	queue->pBase = (int*)malloc(sizeof(int)*6);  //初始化数组代大小
	if(queue->pBase==NULL){
		printf("动态内存分配失败......\n");
		exit(-1);
	}else{
		queue->front = 0;
		queue->rear = 0;
	}
	
}

//判断队列是否已满
bool is_full(QUEUE queue){
	if((queue->rear+1)%6 == queue->front){
		return true;
	}else{
		return false;
	}
} 

//入队
void entry_Queue(QUEUE queue,int val){  //front不变,改变rear
	if(is_full(queue)){
		printf("队列已满,不能再入队......\n");
	//	exit(-1);
	}else{
		queue->pBase[queue->rear] = val;  //队列未满,将val存到rear所指向的位置
		queue->rear = (queue->rear+1)%6;
	}
} 

//判断队列是否为空
bool is_empty(QUEUE queue){
	if(queue->front == queue->rear){
		return true;
		}else{
			return false;
		}
}

//出队
bool out_Queue(QUEUE queue,int *val){    //rear不变,改变front
	if(is_empty(queue)){
		return false;
	}else{
		*val = queue->pBase[queue->front];
		queue->front = (queue->front+1)%6;
	}
} 

//遍历队列元素,从front到rear
void traverse(QUEUE queue){
	if(is_empty(queue)){
		printf("队列为空,不能遍历元素......\n");
		exit(-1);
	}else{
		int r = queue->front;
		while(r!= queue->rear){
			printf("%d ",queue->pBase[r]);
			r= (r+1)%6;
		}
	}
	printf("\n");
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是队列基本操作的完整代码: ``` #include <stdio.h> #include <stdlib.h> // 队列结构体 typedef struct Queue { int front; // 队首指针 int rear; // 队尾指针 int size; // 队列大小 int *arr; // 队列数组指针 } Queue; // 初始化队列 Queue *initQueue(int n) { Queue *Q = (Queue *)malloc(sizeof(Queue)); if (Q == NULL) { printf("初始化失败\n"); return NULL; } Q->front = 0; Q->rear = 0; Q->size = n; Q->arr = (int *)malloc(sizeof(int) * n); printf("初始化成功\n"); return Q; } // 判断队列是否为空 int isEmpty(Queue *Q) { return Q->front == Q->rear ? 1 : 0; } // 判断队列是否满了 int isFull(Queue *Q) { return (Q->rear + 1) % Q->size == Q->front ? 1 : 0; } // 入队 void enQueue(Queue *Q, int x) { if (isFull(Q)) { printf("队列已满\n"); return; } Q->arr[Q->rear] = x; Q->rear = (Q->rear + 1) % Q->size; printf("入队成功:%d\n", x); } // 出队 int deQueue(Queue *Q) { if (isEmpty(Q)) { printf("队列为空\n"); return -1; } int data = Q->arr[Q->front]; Q->front = (Q->front + 1) % Q->size; printf("出队成功:%d\n", data); return data; } // 打印队列元素 void printQueue(Queue *Q) { printf("当前队列元素为:"); for (int i = Q->front; i != Q->rear; i = (i + 1) % Q->size) { printf("%d ", Q->arr[i]); } printf("\n"); } int main() { Queue *myQueue = initQueue(5); enQueue(myQueue, 1); enQueue(myQueue, 2); enQueue(myQueue, 3); enQueue(myQueue, 4); enQueue(myQueue, 5); enQueue(myQueue, 6); //队列已满,应该提示队列已满,而不是入队成功:6 printQueue(myQueue); deQueue(myQueue); deQueue(myQueue); printQueue(myQueue); enQueue(myQueue, 6); enQueue(myQueue, 7); printQueue(myQueue); return 0; } ``` 这个代码实现了队列的基本操作:初始化队列、判断队列是否为空、判断队列是否满了、入队、出队、打印队列元素。你可以在编程中调用这些函数来实现队列的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值