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):\n"); 16 17 while((N=getchar())!=‘\n‘) 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 }
原文地址:https://www.cnblogs.com/WALLACE-S-BOOK/p/8983908.html
时间: 2024-10-14 08:52:21