zoukankan      html  css  js  c++  java
  • 双端队列 ADT接口 链表实现

    Deque ADT接口 DEQUEUE.h:

     1 #include <stdlib.h>
     2 #include "Item.h"
     3 
     4 typedef struct DEQUEUEnode *link;
     5 struct DEQUEUEnode
     6 {
     7     Item item;
     8     link next;
     9     link last;
    10 };
    11 
    12 void DEQUEUEinit(int);
    13 void DEQUEUEerror(void);
    14 Item DEQUEUEheadget(void);
    15 Item DEQUEUEtailget(void);
    16 void DEQUEUEheadput(Item);
    17 void DEQUEUEtailput(Item);
    18 int DEQUEUEisEmpty(void);
    19 int DEQUEUEisFull(void);

    Deque ADT接口实现 DEQUEUE.c:

     1 static link head,tail;
     2 static int N; //备用
     3 
     4 void DEQUEUEinit(int maxN)
     5 {
     6     head=malloc(sizeof(*head));
     7     tail=head;
     8     tail->next=NULL;
     9     tail->last=NULL;
    10     head->next=NULL;
    11     head->last=NULL;
    12     N=maxN;
    13 }
    14 void DEQUEUEerror(void)
    15 {
    16     printf("节点为空或节点已满");
    17     exit(1);
    18 }
    19 Item DEQUEUEheadget(void)
    20 {
    21     Item temp;
    22     temp=head->item;
    23     head=head->next;
    24     free(head->last);
    25     head->last=NULL;
    26     return temp;
    27 }
    28 Item DEQUEUEtailget(void)
    29 {
    30     Item temp;
    31     tail=tail->last;
    32     temp=tail->item;
    33     free(tail->next);
    34     tail->next=NULL;
    35     return temp;
    36 }
    37 void DEQUEUEheadput(Item value)
    38 {
    39     head->last=malloc(sizeof(*head));
    40     if(DEQUEUEisFull())
    41         DEQUEUEerror();
    42     head->last->next=head;
    43     head=head->last;
    44     head->item=value;
    45     head->last=NULL;
    46 }
    47 void DEQUEUEtailput(Item value)
    48 {
    49     tail->item=value;
    50     tail->next=malloc(sizeof(*head));
    51     if(DEQUEUEisFull())
    52         DEQUEUEerror();
    53     tail->next->last=tail;
    54     tail=tail->next;
    55     tail->next=NULL;
    56 }
    57 int DEQUEUEisEmpty(void)
    58 {
    59     if(head==NULL&&tail==NULL)
    60         return 1;
    61     return 0;
    62 }
    63 int DEQUEUEisFull(void)
    64 {
    65     if((head==NULL&&tail!=NULL)||(head!=NULL&&tail==NULL))
    66         return 1;
    67     return 0;
    68 }

    Item.h:

    1 typedef char Item;

    主程序 main.c:

     1 #include <stdio.h>
     2 
     3 int main(void)
     4 {
     5     int N;
     6     
     7     printf("输入需要申请内存大小:");
     8     if(scanf("%d", &N))
     9         DEQUEUEinit(N);
    10     else
    11         DEQUEUEerror();
    12     getchar();
    13     printf("输入%d个字符",N);
    14     printf("('+'从队头get '*'从队尾get '大写字母'"
    15               "从队头put '小写字母'从队尾put):
    ");
    16               
    17     while((N=getchar())!='
    ')
    18     {
    19         switch(N)
    20         {
    21             case '+':
    22                 putchar(DEQUEUEheadget());
    23                 break;
    24             case '*':
    25                 putchar(DEQUEUEtailget());
    26                 break;
    27             default:
    28                 if(N>64&&N<91)
    29                     DEQUEUEheadput(N);
    30                 else
    31                     DEQUEUEtailput(N);
    32         }
    33     }
    34     
    35     return 0;
    36 }
  • 相关阅读:
    数据存储 twisted
    数据存储 mongodb
    数据存储 redis
    数据存储 txt
    同时使用有线内网与无线外网
    使用xshell从服务器下载文件
    everything使用技巧
    【吴恩达机器学习】第8章 正则化
    python文件重命名
    【统计学习】 第5章 决策树
  • 原文地址:https://www.cnblogs.com/WALLACE-S-BOOK/p/8983908.html
Copyright © 2011-2022 走看看