c实现队列的链式结构

//
//  QTLink.c
//  duizhanduilie
//
//  队列的链式存储结构

#include <stdio.h>
#include <stdlib.h>
#define M 10
#define QElemType int
typedef  struct node{
    QElemType data;
    struct node *link;
}QLinkNode;
typedef struct{
    QLinkNode* front;
    QLinkNode* rear;
}LinkQueue;
//初始化队列
void INIITALQ(LinkQueue* linkqueue);
//测试队列是否为空
int EMPTYQ(LinkQueue* linkqueue);
//插入元素
void ADDLINKQ(LinkQueue* linkqueue,QElemType item);
//删除一个元素
void DELLINKQ(LinkQueue* linkqueue);
//输出队列的值
void print(LinkQueue* linkqueue);
//取对头元素
int gethead(LinkQueue* linkqueue);
//清空队列
void clearqueue(LinkQueue* linkqueue);
int main(){
    LinkQueue* linkqueue;
    INIITALQ(linkqueue);
    printf("向队列中插入元素");
    for(int i=1;i<5;i++){
         ADDLINKQ(linkqueue,i);
    }
    print(linkqueue);
    printf("从队列中删除元素");
    for(int i=1;i<5;i++){
        DELLINKQ(linkqueue);
    }
    print(linkqueue);

}
//初始化队列
void INIITALQ(LinkQueue* linkqueue){
    LinkQueue* head = (LinkQueue* )malloc(sizeof(LinkQueue));
//    assert(head);
    linkqueue->front=linkqueue->rear=head;
    linkqueue->front->link = NULL;
}
//测试队列是否为空
int EMPTYQ(LinkQueue* linkqueue){
    if(linkqueue->front->link == NULL){
        return 1;
    }
    return 0;
}
//插入元素
void ADDLINKQ(LinkQueue* linkqueue,QElemType item){
    QLinkNode* p;
    p=(QLinkNode*)malloc(sizeof(QLinkNode));
//    assert(p);
    p->data = item;
    p->link= NULL;
    if(linkqueue->front == NULL){//插入空队情况
        linkqueue->front = p;
    }else{//插入非空队的情况
        linkqueue->rear ->link = p;
    }
    linkqueue->rear = p;
}
//删除一个元素
void DELLINKQ(LinkQueue* linkqueue){
    QElemType item;
    QLinkNode* p;
    if(EMPTYQ(linkqueue)){
        
    }else{
        p=linkqueue->front->link;
        linkqueue->front=p->link;
        item = p->data;
        if(linkqueue->rear = p){
            linkqueue->rear = linkqueue->front;
        }
        free(p);
    }
}
//输出队列的值
void print(LinkQueue* linkqueue){
    QLinkNode* p;
    p=linkqueue->front->link;
    while(p){
        printf("%d",p->data);
        p=p->link;
    }
}
//取对头元素
int gethead(LinkQueue* linkqueue){
    int item;
    if(EMPTYQ(linkqueue)){
        printf("queue is null\n");
    }
    QLinkNode* p;
    p=linkqueue->front->link;
    item = p->data;
    return item;
}
//清空队列
void clearqueue(LinkQueue* linkqueue){
    while(linkqueue->front!=NULL){//队列非空时
        linkqueue->rear = linkqueue->front->link;
        free(linkqueue->front);//释放一个结点空间
        linkqueue->front=linkqueue->rear;
    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值