队列

顺序队列

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXLEN 10    //定义队列的最大容量
typedef int Datatype;   //数据类型
typedef struct{
    Datatype data[MAXLEN];
    int front,rear;    //定义对头与队尾指针
}SeQueue;
SeQueue InitSeQueue(){   //队列初始化操作
    SeQueue q;
    q.front=-1;
    q.rear=-1;
    return(q);
}
int Getfront(SeQueue *q, int *x) {  //获取队首元素
    if(q->front==q->rear)
        return(0);
    else{
        *x=q->data[(q->front)+1];
        return(1);
    }
}
int EnterSeqQueue(SeQueue *q, int* x) {  //入队操作
    if(q->rear>=MAXLEN-1)  //队列已满,插入失败
        return(0);
    else{
        q->rear++;
        q->data[q->rear]=x;
        return(1);
    }
}
int Empty(SeQueue *q){               //判断队空{
    return(q->front==q->rear);
}
int DelSeqQueue(SeQueue *q, int *x) {   //出队操作
    if(q->front==q->rear)   //队列为空,无元素可删除
        return(0);
    else{
        q->front++;
        *x=q->data[q->front];
        return(1);}
}
void print(SeQueue q){
    int n;
    if(q.front!=q.rear){
        printf("队列剩余元素为: ");
        for(n=q.front+1;n<=q.rear;n++)
            printf("%d  ",q.data[n]);
    }
    else
        printf("队列为空\n");
}
int main(){
    SeQueue Myqueue;
    int n,y,z,i,j;
    Myqueue=InitSeQueue();
    if(Empty(&Myqueue)!=0)
        printf("\n队列为空!");
    else
        printf("\n队列非空!");
    printf("\n请输入队列元素的数目: ");
    scanf("%d",&n);
    printf("请输入待入队的%d个元素:\n",n);
    for(i=1;i<=n;i++){
        scanf("%d",&y);
        EnterSeqQueue(&Myqueue,y);
    }
    print(Myqueue);
    Getfront(&Myqueue,&z);
    printf("当前队列的队头元素为: %d \n",z);
    print(Myqueue);
    printf("\n请输入出队元素的个数:\n",n);
    scanf("%d",&j);
    for(i=1;i<=j;i++){
        DelSeqQueue(&Myqueue,&z);
        printf("%d ",z);
    }
    printf("\n");
    print(Myqueue);
    if(Empty(&Myqueue)!=0)
        printf("\n队列为空!");
    else
        printf("\n队列非空!");
    system("pause");
}

链式队列

#include<iostream>
using namespace std;
typedef int elemType;
struct QNode{
    elemType data;
    QNode *next;
};
struct LinkQueue{
    QNode *front;
    QNode *rear;
};
//初始化
void InitQueue(LinkQueue *q){
    q->front = q->rear = new QNode;
    q->front->next = NULL;
}
//插入元素e为队列新的队尾元素
void EnQueue(LinkQueue *q, elemType e){
    QNode *p = new QNode;
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
}
//删除队首元素,并打印其值
void DeQueue(LinkQueue *q){
    QNode *p = q->front->next;
    if(q->front==q->rear)
        cout<<"队列为空"<<endl;
    else{
        elemType x = p->data;
        cout<<"删除队头元素: "<<x<<endl;
        q->front->next = p->next;
        if(q->rear == p)
            q->rear = q->front;
        delete p;
    }
}
//遍历队列
void TraQueue(LinkQueue *q){
    QNode *p = q->front->next;
    int i = 1;
    if(q->front==q->rear)
        cout<<"队列为空"<<endl;
    else{
        while(p!=q->rear){
            cout << i <<":\t"<<p->data<<endl;
            p = p->next;
            i++;
        }
        cout << i <<":\t"<<q->rear->data<<endl;
    }
}

//清空队列
void ClearQueue(LinkQueue *q){
    if(q->front==q->rear)
        cout<<"出错,队列已经为空"<<endl;
    else{
        q->rear->next = q->front;
        delete(q->front);
        q->front = q->rear;
    }
}

//求队列长度
int LengthQueue(LinkQueue *q){
    QNode *p = q->front->next;
    int length = 0;
    if(q->front!=q->rear){
        while(p){
            length++;
            p = p->next;
        }
    }
    return length;
}
int main(){
    LinkQueue q;
    InitQueue(&q);
    for(int i=1;i<7;i++)
        EnQueue(&q,i);
    int length = LengthQueue(&q);
    cout <<"队列长度为: "<< length <<endl;
    TraQueue(&q);
    cout<<endl;
    DeQueue(&q);
    TraQueue(&q);
    cout<<endl;
    for(int i=0;i<5;i++)
        DeQueue(&q);
    TraQueue(&q);
    cout<<endl;
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值