数据结构—队(顺序存储)

顺序存储:

struct.h

#ifndef _STRUCT_H
#define _STRUCT_H

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define SIZE 10

typedef struct infonode{
        int a[SIZE];
        int prev;
        int next;
}info, *pinfo;

void init(pinfo *p);
void add(pinfo p, int num);
int out(pinfo p); 
bool is_full(pinfo p);
bool is_empty(pinfo p);
void show(pinfo p); 

#endif

func.c

 #include"struct.h"
 
 
 //初始化
 void init(pinfo *p)
 {
         (*p) = (pinfo)malloc(sizeof(info));
         if(*p == NULL)
         {
                 perror("init malloc failed");
                 exit(1);
         }
 
         (*p)->prev = SIZE - 1;
         (*p)->next = SIZE - 1;
 }
 
 //入队
 void add(pinfo p, int num)
 {
         if(is_full(p))
         {
                 printf("the queue is full\n");
                 return;
         }
         p->prev = (p->prev+1)%SIZE;
         p->a[p->prev] = num;
 }
 
 //出队
 int out(pinfo p)
 {
         int data;
 
         if(is_empty(p))
         {
                 printf("the queue is empty\n");
                 return 0;
         }
 
         p->next = (p->next+1)%SIZE;
         data = p->a[p->next];
 
         return data;
}

//判满
bool is_full(pinfo p)
{
        if(p->next == (p->prev+1)%SIZE)
                return true;
        else
                return false;
}

//判空
bool is_empty(pinfo p)
{
        if(p->next == p->prev)
                return true;
        else
                return false;
}

//遍历
void show(pinfo p)
{
         int i = p->next, j = p->prev;
 
         if(is_empty(p))
         {
                 printf("not any data in the queue\n");
                 return ;
         }
 
         while(i != j)
         {
                 i = (i+1)%SIZE;
                 printf("%d ",p->a[i]);
         }
 
         printf("\n");
 }

main.c

 #include"struct.h"
 
 
 int main(void)
 {
         int i;
         pinfo p;
         init(&p);
 
         int a[4] = {123,4234,254,23};
         for(i = 0; i < 4; i++)
                 add(p, a[i]);
 
         printf("the first add: ");
         show(p);
 
         printf("the first data = %d\n", out(p));
         printf("after the first out :");
         show(p);
 
         return 0;
 }       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值