数据结构----队列

来源:互联网 发布:linux 打包压缩文件夹 编辑:程序博客网 时间:2024/04/30 14:37
队列感觉难度比栈要高,比起链表要小#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define MAX 10/*队列是一种允许在一端插入,在另一端删除的线性表  C语言里面数组的下标是从0开始的,初始化队列的时候,令front=rear=-1,当插入新的元素的时候,rear+1  当队头元素出队列的时候,队头指示器front+1,非空队列front总是指向队列中实际队头的前一个位置,尾指示器  总是指向队尾元素*/typedef struct{    int qm[MAX];    int front;//头指示器    int rear;}queue;void Initqueue(queue*q)//初始化队列{    q->front=-1;    q->rear=-1;}int queueempty(queue*q)//判断队列是否空{    if(q->front==q->rear)    {        return 1;    }    else    {        return 0;    }}int queuefull(queue*q)//判断是否满了{    if(q->rear==MAX-1)    {        printf("队列已经满了,不能进入队列操作\n");        return 1;    }    else    {        return 0;    }}int queuelength(queue q)//获取长度{    return (q.rear-q.front);}int insertqueue(queue*q,int m)//插入元素{    if(queuefull(q))return 0;    q->rear=q->rear+1;    q->qm[q->rear]=m;    return 1;}int delqueue(queue*q,int *e){    if(queueempty(q))return 0;    q->front=q->front+1;    *e=q->qm[q->front];    return 1;}void queuedis(queue q){    int i;    printf("队列的元素是:\n");    for(i=q.front+1;i<=q.rear;i++)    {        printf("%d",q.qm[i]);    }    printf("\n");}void main(){    queue Q,*q1=&Q;    int i,y,n;    int x;    Initqueue(&Q);    printf("请输入需要入队列的个数:\n");    scanf("%d",&n);    while(n>MAX)    {        printf("超过限制:重新输入 :\n");        scanf("%d",&n);    }    printf("请输入要入队的元素:\n");    for(i=1;i<=n;i++)    {        scanf("%d",&y);        insertqueue(&Q,y);    }    queuedis(Q);    printf("顺序队列的长度为:%d\n",queuelength(Q));    for(i=1;i<=n;i++)    {        delqueue(&Q,&x);        printf("第%d次出队,出队列的元素为:%d\n",i,x);        queuedis(Q);        printf("\n");    }    printf("请输入入队的元素:\n");    scanf("%d",&y);    insertqueue(&Q,y);    queuedis(Q);    printf("顺序队列的长度:%d\n",queuelength(Q));    printf("\n");    printf("请输入入队元素:\n");    scanf("%d",&y);    insertqueue(&Q,y);    queuedis(Q);     printf("顺序队列的长度:%d\n",queuelength(Q));    printf("\n");}

0 0
原创粉丝点击