数据结构 链队列

有头节点

#include<stdio.h>
typedef long long ll;

const ll INF=0x3f3f3f;
typedef struct LinkNode{
	int data;
	struct LinkNode* next;
}LinkNode;

typedef struct LinkQueue{
	LinkNode* front;
	LinkNode* rear;
}LinkQueue;

LinkQueue* InitQueue() {
	LinkQueue* Q=(LinkQueue*)malloc(sizeof(LinkQueue));;
	Q->front=Q->rear=(LinkNode*)malloc(sizeof(LinkNode));
	Q->front->next=NULL;
	return Q;
}

int IsEmpty(LinkQueue* Q) {
	int flag=0;
	if(Q->front=Q->rear) flag=1;
	return flag;
}

void EnQueue(LinkQueue* Q, int x) {
	LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
	s->next=NULL;
	s->data=x;
	Q->rear->next=s;
	Q->rear=s;
}

int DeQueue(LinkQueue* Q) {
	if(Q->front==Q->rear) return INF;
	else {
		int x;
		LinkNode* s=Q->front->next;
		x=s->data;
		Q->front->next=s->next;
		if(Q->rear==s) Q->rear=Q->front;
		free(s);
		return x;
	}
}

int main() {
	LinkQueue* Q=InitQueue();
	int x;
	int n=3;
	for(int i=0;i<n;i++) {
		scanf("%d", &x);
		EnQueue(Q, x);
	}

	for(int i=0;i<n+1;i++) {
		x=DeQueue(Q);
		printf("%d\n", x);
	}

    return 0;
}

无头节点

#include<stdio.h>

typedef struct LinkNode {
    int data;
    struct LinkNode* next;
} LinkNode;

typedef struct LinkQueue {
    struct LinkNode* front;
    struct LinkNode* rear;
} LinkQueue;

LinkQueue* InitQueue() {
    LinkQueue* Q=(LinkQueue*)malloc(sizeof(LinkQueue));
    Q->front=NULL;
    Q->rear=NULL;
    return Q;
}

void EnQueue(LinkQueue* Q, int x) {
    LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
    s->data=x;
    s->next=NULL;
    if(Q->front==NULL) Q->front=s;
    else Q->rear->next=s;
    Q->rear=s;
}

int DeQueue(LinkQueue* Q) {
    int x=-1111;
    if(Q->rear==NULL) return x;
    else {
        LinkNode* s=(LinkNode*)malloc(sizeof(LinkNode));
        s=Q->front;
        x=s->data;
        if(Q->front==Q->rear) Q->front=Q->rear=NULL;
        else  Q->front=s->next;
        free(s);
    }
    return x;
}

int main() {
    LinkQueue* Q=InitQueue();
    int n=3;
    for(int i=0; i<n; i++) {
        int x;
        scanf("%d", &x);
        EnQueue(Q, x);
    }
    for(int i=0; i<n+1; i++) {
        int x=DeQueue(Q);
        printf("%d\n", x);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值