队列的基本操作

来源:互联网 发布:希尔伯特矩阵 matlab 编辑:程序博客网 时间:2024/04/26 22:52
//队列的基本操作//队列只用一次动态分配内存,也就是说在一个内存单元里存储元素,所以要用到数组存储//有一些小细节要注意#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Queue{int *base;//设为int是在后面的赋值中起作用int len;int front;int rear;}QUEUE,*pQueue;void init(pQueue pQ,int len);    //初始化int in(pQueue pQ);      //入列void out(pQueue pQ,int *val);     //出列void printqueue(pQueue pQ);   //打印队列bool Is_empty(pQueue pQ);     //判断为空bool Is_full(pQueue pQ);      //判断为满int main(){//pQueue q;//会产生野指针    QUEUE q;     int len1,num=0;int val;//----------------printf("请输入要存储几个元素:");scanf("%d",&len1);init(&q,len1);while (len1){      if(!in(&q))  break;}printqueue(&q);//----------------printf("输入要出列几位元素:");scanf("%d",&num);printf("出列元素为:\n");while (num--){   out(&q,&val);        printf("%d",val);}printf("\n");//---------------printqueue(&q);return 0;}void init(pQueue pQ,int len){pQ->base=(int *)malloc(sizeof(Queue)+sizeof(int));   //不可以用(pQueue) malloc  类型转换出问题了。if (pQ->base== NULL){printf("分配内存失败\n");exit(-1);}    pQ->front=pQ->rear=0;pQ->len=len;}int in(pQueue pQ){if(Is_full(pQ)){printf("队列已满\n");return 0;}printf("输入入列元素:");int val;scanf("%d",&val);pQ->base[pQ->rear]=val;pQ->rear++;    return 1;}void out(pQueue pQ,int *val){    if (Is_empty(pQ)){    printf("队列为空\n");    return ;}    *val=pQ->base[pQ->front];    pQ->front++;}void printqueue(pQueue pQ){if (Is_empty(pQ)){printf("队列为空\n");return ;}int t=pQ->front;    printf("列元素为:");while (t != pQ->rear){       printf("%d",pQ->base[t]);   t++;}printf("\n");}bool Is_full(pQueue pQ){ return (pQ->rear+1)%pQ->len==pQ->front;}bool Is_empty(pQueue pQ){ return pQ->front==pQ->rear;}

0 0
原创粉丝点击