x学习日志3

佟奇 写于:2018.9.12
今日学习任务
复习栈和队列的相关知识点,队列的顺序是先进先出,学习顺序存储和链式存储
今日任务完成情况
队列 先进先出 {顺序 连式存储}
队头:取出数据
队尾:存放数据
1、对列的顺序存储:循环队列
2、空队 就是队头队尾重合
3、对尾指针,指向最后一个元素的后一个(容量为7,则实际存储为6)
4、循环队列长度:rear-front
5、循环队列长度:(rear-front+MAXSIZE)% MAXSIZE,当对尾在队头前面
6、判断队列是否满:( rear+1 )%MAXSIZE = front
对于链式与顺序存储有了初步的了解。
今日开发中出现的问题汇总
了解队列是从队尾存放数据,队头取出数据。
空队:对头队尾重合 队尾指针:指向最后一个元素的后一个(n-1)
循环队列的长度:(rear –front +MAXSIZE)%MAXSIZE
如:7%5 取整=1; 5%7取余=5;取整=0;
判断栈是否满:(rear+1)%MAXSIZE=front
注意:
在queue.c中所写的如下程序的头文件必须在queue.h中加上且必须加分号(;)
main .c 程序

include”queue.h”

include”stdio.h”

int main()
{
int ret,i;
Q *queue;

ret =InitQueue(&queue);
if(ret==SUCCESS)
{
   printf("Init Success!\n");   
 }
else
{
   printf("Init Failure!\n");
}

for(i=0;i<10;i++)
{
  ret=EnterQueue(queue,i+1);
   if(ret ==SUCCESS)
   {
      printf("Enter %d Success!\n",i+1);

   }
   else
   {
      printf("Enter Failure!\n");
   }

}
  for (i=0;i<6;i++)
  {
    ret = DeleteQueue(queue);
    if(ret == FAILURE)
      {
          printf("Delete Failure!\n");        
      }
      else 
      {
        printf("Delete %d Success!\n",ret);
      }
  }

      ret = LengthQueue(queue);
      printf("length is %d\n",ret);

return 0;

queue.c 程序

include “queue.h”

include “stdlib.h”

int InitQueue(Q **q)
{
if(NULL==q) //入参判断
{
return FAILURE;
}
(q)=(Q )malloc(sizeof(Q)); //给队列信息申请空间

 if(NULL==(*q))
 {
    return FAILURE;
 } 
Node *p=(Node*)malloc(sizeof(Node)); //头结点申请空间
if(NULL==p)

{
return FAILURE;
}

(*q)->front =(*q)->rear=p; //队头指针 对尾指针都指向头结点
return SUCCESS;

}

int EnterQueue(Q *q, int e)
{
    if(NULL==q)
    {

       return FAILURE;

    }

    Node *p =(Node *)malloc(sizeof(Node));
    if(NULL==p)
    {
       return FAILURE;

    }     

    p->next =NULL;
    p->data =e;

    q->rear->next =p;
    q->rear=p;

     return SUCCESS;

}
int DeleteQueue(Q *q)
{
if(NULL==q)
{
 return FAILURE;

}
if(q->rear ==q->front)
{ return FAILURE;}

Node *p =q->front->next;
int e  = p->data;
q->front->next=p->next;
free(p);

if(q->rear==p)
{
  q->rear=q->front;
}
 return e;
}

int LengthQueue(Q *q)
{
if(NULL== q)
{
return FAILURE;
}

 int length=0;

 Node *p= q->front ->next;
 while (p)
 {

queue.h 程序

ifndef QUEUE_H

define QUEUE_H

define SUCCESS 1000

define FAILURE 1001

struct mode //结点的信息
{
int data; //数据域
struct mode *next; //指针域
};
typedef struct mode Node;

struct queue //队列的信息
{
Node *front; //队头指针
Node *rear; //队尾指针
};

typedef struct queue Q;

int InitQueue(Q **q);
int EnterQueu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值