Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include "stack.h"
- #define LEN 1000
- stack::~stack()
- {
- stack_node *c,*nx;
- for(c=head;c;c=nx)
- {
- nx=c->next;
- delete c;
- }
- head=0;
- }
- int stack::read(FILE *fp,int len)
- {
- int i;
- stack_node *d,*curr;
- this->~stack();
- head= new stack_node();
- if(!head) return -1;
- if((head->read(fp))<0) {delete head;head=0;return -1;}
- d=head;
- for(i=1;i<len;i++)
- {
- curr=new stack_node();
- if(!curr){ return -1;}
- if((curr)->read(fp)<0)
- {
- delete curr;
- curr=0;
- return -1;
- }
- d->next=curr;
- d=d->next;
- }
- return 0;
- }
- void stack::print(FILE *fp,int level,int len)
- {
- int i=0,j;
- stack_node *c;
- printf("******\n");
- for(c=head;c && i<len;c=c->next, i++)
- {
- for(j=0;j<level*2;j++) printf(" ");
- c->print(fp);
- }
- for(j=0;j<level*2;j++) printf(" ");
- printf("******\n");
- }
- int stack :: operator < (const stack & b)
- {
- if (*head<*b.head) return 1;
- return 0;
- }
- int stack :: operator > (const stack & b)
- {
- if (*head>*b.head) return 1;
- return 0;
- }
- int stack :: operator == (const stack & b)
- {
- if (*head==*b.head) return 1;
- return 0;
- }
- void stack::add_head(stack_node *add)
- {
- if(!head) head=add;
- else
- {
- add->next=head;
- head=add;
- }
- }
- int stack::del_head()
- {
- stack_node *a;
- if(!head) return -1;
- else
- {
- a=head;
- head=head->next;
- delete a;
- }
- return 0;
- }
- void stack:: menu()
- {
- char *p;
- char s[LEN];
- int k,n;
- print_menu_stack();
- while(fgets(s,LEN,stdin))
- {
- k=strtol(s,&p,10);
- if(p==s) continue;
- switch(k)
- {
- case -1: return ;
- case 0:
- {
- if(head) head->menu();
- else printf("Нет элемента\n");
- break;
- }
- case 1:
- { printf("Введите кол-во элементов для печати:\n");
- if(scanf("%d",&n)!=1)
- { printf("Error\n");
- break;
- }
- print(stdout,0,n);
- break;
- }
- case 2:
- {
- stack_node * p=new stack_node();
- if(!p)
- {
- printf("Error\n");
- break;
- }
- printf("Введите добавляемый элемент:\n");
- if(p->read(stdin)<0)
- {
- printf("Error read\n");
- delete p;
- p=0;
- break;
- }
- add_head(p);
- break;
- }
- case 3:
- {
- if((del_head())!=0) printf("Невозможно удалить элемент\n");
- break;
- }
- default: { printf("Error number\n");}
- }
- print_menu_stack();
- }
- return ;
- }
- void print_menu_stack()
- {
- printf("В классе STACK доступны следующие функции:\n");
- printf("-1-выйти\n");
- printf("0-вызвать меню\n");
- printf("1-печать\n");
- printf("2-добавить элемент в стек\n");
- printf("3-удалить элемент из стека\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement