用指针实现队列的方法

队列:先进先出

#include<stdio.h>
#include<stdlib.h>
typedef int QItem;
typedef struct qnode*qlink;
typedef struct qnode
{
	QItem element;
	qlink next;
}Qnode;

typedef struct Ique *Queue;
typedef struct Ique
{
	qlink rear;
	qlink front;
}Lqueue;

//*******************************
//队列初始化
Queue QueueInit()
{
	Queue Q;
	Q=(Queue)malloc(sizeof*Q);
	Q->front=Q->rear=0;
	return Q;
}

//******************************
//队列是否为空
int QueueEmpty(Queue Q)
{
	return Q->front==0;
}
//******************************
//为队列Q试分配一个结点,检测队列是否已满
int QMemFull()
{
	qlink p;
	if((p=(qlink)malloc(sizeof(Qnode)))==0)
	return 1;
	else {
		free(p);
		return 0;
	}
}

int QueueFull(Queue Q)
{
	return QMemFull();
}
//*******************************
//返回队首的元素
QItem QueueFirst(Queue Q)
{
	if(QueueEmpty(Q))
	{
		printf("Queue is empty");
		exit(0);
	}
	return Q->front->element;
}
//******************
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用指针实现队列的示例代码(使用链表实现): ```c #include <stdio.h> #include <stdlib.h> // 定义队列节点结构 typedef struct Node { int data; struct Node* next; } Node; // 定义队列结构 typedef struct Queue { Node* front; Node* rear; } Queue; // 初始化队列 void initQueue(Queue* q) { q->front = NULL; q->rear = NULL; } // 判断队列是否为空 int isEmpty(Queue* q) { return (q->front == NULL); } // 入队操作 void enqueue(Queue* q, int data) { // 创建新节点 Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; if (isEmpty(q)) { // 队列为空,新节点为队头和队尾 q->front = newNode; q->rear = newNode; } else { // 将新节点加入队尾 q->rear->next = newNode; q->rear = newNode; } } // 出队操作 int dequeue(Queue* q) { if (isEmpty(q)) { printf("Queue is empty.\n"); return -1; // 返回一个特殊值表示出错 } // 取出队头节点数据并删除节点 int data = q->front->data; Node* temp = q->front; q->front = q->front->next; free(temp); // 如果队列为空,则重置队尾指针 if (q->front == NULL) { q->rear = NULL; } return data; } // 打印队列元素 void printQueue(Queue* q) { if (isEmpty(q)) { printf("Queue is empty.\n"); return; } Node* temp = q->front; while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { Queue q; initQueue(&q); enqueue(&q, 1); enqueue(&q, 2); enqueue(&q, 3); printf("Queue: "); printQueue(&q); int data = dequeue(&q); printf("Dequeued element: %d\n", data); printf("Queue after dequeue: "); printQueue(&q); return 0; } ``` 这个示例代码使用链表实现队列,通过结构体指针 `front` 和 `rear` 分别指向队列的头部和尾部。入队操作通过创建新的节点并将其加入队尾,出队操作则取出队头节点并删除。`isEmpty()` 函数用于判断队列是否为空,`printQueue()` 函数用于打印队列中的元素。在 `main()` 函数中,我们进行了一些入队和出队操作,并打印队列的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值