顺序队列的基本操作

/*数据结构-顺序队列的基本操作*/

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAXSIZE 10        /*队列的最大容量*/
int in_data,d_data;

typedef struct student    /*定义队列的数据结构*/
{
    int data[MAXSIZE-1];      /*用来存放数据*/
    int front;          /*用来指向第一个节点*/
    int rear;           /*用来指向最后一个节点*/
    int count;          /*队列中的现有数据元素个数*/
    int max;            /*队列允许的最多数据元素个数*/
}qnode;

 

 

/*创建一个空队列的函数*/
qnode *creat()
{
    qnode *p;
    p=(qnode *)malloc(sizeof(qnode));
    if(!p)printf("error./n");
    else
    {
       p->rear=-1;
       p->front=0;
        p->count=0;
        p->max=MAXSIZE;
    }
    return(p);
}


 /*清空队列queue为空队列的函数*/
int clearqueue(qnode *queue)
{
    queue->rear=-1;
    queue->front=0;
    queue->count=0;
    return(1);
}


/*若队列queue为空队列则返回1,否则返回0的函数*/
int queueempty(qnode *queue)
{
    if(queue->count==0)
    return(1);
}


/*求队列queue的长度的函数*/

int queuelength(qnode *queue)
{   
    return(queue->count);
}


/*若队列不为空,输出队列queue的队头元素e*/
int gethead(qnode *queue)
{
    int e;
    if(queue->count=0)printf("The queue is null ./n");
    else
    {
        e=queue->data[queue->front];
    }
    return(e);
}


/*插入e为队列queue的新的队尾元素----入队*/
qnode *input(qnode *queue,int e)
{
    if(queue->count==queue->max)
    {printf("The queue is full./n");
     exit(1);}
    else
    {

        queue->rear++;
        queue->data[queue->rear]=e;
        queue->count++;
    }
    return(queue);       
}


/*若队列不为空则用e返回它的队头元素.并删除它----出队*/
int dehead(qnode *queue)
{
  if(queue->count==0)
     printf("the queue is null./n");
  else
    return(queue->data[queue->front]);

}

/*若队列不为空,则删除队列queue的尾元素e,并输出*/
int delast(qnode *queue)
{
    int e;
    if(queue->count=0)printf("The queue is null ./n");
    else
    {
        e=queue->data[queue->rear];
        free(&(queue->data[queue->front+1]));/*注意:free后面的括号里面是一个地址,而不能是一个地址里的数据。
                                                    所以不能写成free(queue->data[queue->front+1]); */
        queue->count--;
        queue->rear--;
    }
    return(e);
}

 


int main()
{

 qnode *a,*b;
 int in_data1,in_data2,in_data3,d_data;

 printf("begine..../n/n");
 printf("creat a null queue./n");
 a=creat();                         /*调用creat函数*/

 /*输入三个数据*/
 printf("Input the data: ");     
 scanf("%d",&in_data1);
 b=input(a,in_data1);

 printf("Input other data: ");
 scanf("%d",&in_data2);
 b=input(a,in_data2);

 printf("Input other data: ");
 scanf("%d",&in_data3);
 b=input(a,in_data3);


 if(queueempty(b))     /*调用queueempty函数*/
     printf("the queue's lenth is: %d/n",queuelength(b));  /*调用queuelength函数*/

 

 printf("delete the queue's head data is: %d/n", dehead(b));   /*调用dehead函数*/
 printf("delete the queue's last data is: %d/n", delast(b));  /*调用delast函数*/

 return(1);

}

 

/*还有gethead和clearqueue两个函数没有调用*/

 

 

 

/*
总结:
        1.用if判断条件时,如果是判断是否相等,则逻辑符号一定要用"==",不能用成"=".
          如: if(queue->count==0)不能写成 if(queue->count=0)  .
        2.用scanf函数时一定要在变量前加 & 符号.
        3.free函数的调用一定要小心.
        4.用#define定义的符号若代表一个常数,可以作为一个常量给其他的变量赋值.
        5.不能在结构体里直接给结构体里面的变量赋值.
        6.free后面的括号里面是一个地址(比如:free(&a)里&a的实际意义其实是一个地址。)
          而不能是一个地址里的数据。所以不能写成free(queue->data[queue->front+1]);

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值