数据结构—队(链式存储)

链式存储:

struct.h

 #ifndef _STURCT_H
 #define _STRUCT_H
 
 #include<stdio.h>
 #include<stdlib.h>
 #include<stdbool.h>
 
 typedef struct queuenode{
         int data;
         struct queuenode *next;
 }queue, *pqueue;
 
 typedef struct linknode{
         pqueue prev;
         pqueue behind;
 }link, *plink;
 
 void init(pqueue *head, plink *p);
 void add(plink p, int data);
 int out(plink p);
 bool is_empty(plink p);
 bool is_empty(plink p);
 
 #endif

func.c

#include"struct.h"


//初始化
void init(pqueue *head, plink *p)
{
        (*head) = (pqueue)malloc(sizeof(queue));
        if((*head) == NULL)
        {
                perror("in the init malloc failed");
                exit(1);
        }

        (*head)->next = NULL;

        (*p) = (plink)malloc(sizeof(link));
        if(*p == NULL)
        {
                perror("in the init malloc falied");
                exit(1);
        }

        (*p)->prev = *head;
         (*p)->behind = *head;
 
 }
 
 //入队
 void add(plink p, int data)
 {
         pqueue new = (pqueue)malloc(sizeof(queue));
         if(new == NULL)
         {
                 perror("add malloc failed");
                 exit(1);
         }
 
         new->data = data;
         p->prev->next  = new;
         p->prev = new;
         new->next = NULL;
 
 }
 
 //出队
 int out(plink p)
 {
         int data;
         pqueue temp;
 
         if(is_empty(p))
         {
                 printf("in the queue not any data\n");
                 return 0;
         }
 
         data = p->behind->next->data;
         temp = p->behind;
         p->behind = p->behind->next;
 
         free(temp);
 
         return data;
 }
 
 
 //判空
 bool is_empty(plink p)
 {
         if(p->prev == p->behind)
                 return true;
         else
                 return false;
 
 }
 
 //遍历
 void show(plink p)
 {
         pqueue p1 = p->prev;
         pqueue p2 = p->behind;
 
         if(is_empty(p))
         {
                 printf("not any data in the queue\n");
                 return ;
         }
 
         while(p1 != p2)
         {
                 p2 = p2->next;
                 printf("%d ", p2->data);
 
         }
 
         printf("\n");
 
 }
 

main.c

 #include"struct.h"
 
 
 int main(void)
 {
         int i;
         pqueue head;
         plink p;
         int a[10] = {12,23,123,213,123,12,12,22,455,2424}; 
         
         init(&head, &p);
         show(p);
 
         for(i = 0; i< 10; i++)
                 add(p,a[i]);
 
         printf("the first add:");
         show(p);
 
         printf("out the data = %d\n",out(p));
         printf("after out a data : ");
         show(p);
         return 0;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值