Програмчлалын хэлэнд өгөгдлийн бүтэцүүдийг ерөнхийд нь шугаман ба шугаман бус гэж хоёр ангилдаг. Үүний шугаман өгөгдлийн бүтцэд нь хамаарах бүтцийн нэг нь стек юм. Стек нь зөвхөн нэг талаасаа өгөгдлийг хийх ба авах үйлдэл хийдэг бөгөөд нь энэ сүүлд орсон нь эхэлж гарна. /LIFO/ гэсэн зарчмаар ажиллана.
Стекийг массиваар зохион байгуулах
Энд стекийг массиваар зохион байгуулна. Стекийг массиваар зохион байгуулахад класс ашиглах боловч стекийн хэмжээ тогтмол байдаг учир массиваар зохион байгуулах гэж хэлж болох юм.
- Стек үүсгэх
struct MStack create(struct MStack stack,int size)
{ if(stack.sp!=0) {
printf("\nStack is already created"); getch();
return(stack);
}
else { stack.item=(int *)malloc(size*2);
stack.size=size;
stack.sp=0;
return(stack);
}
}
- Стекийн оройн элемент шалгах
int top(struct MStack stack)
{ if(stack.sp=0) { printf("\nStack is Empty");
return(0);
}
else return(stack.item[stack.sp-1]);
}
- Стект элемент нэмэх
struct MStack Add(struct MStack stack,int item)
{ if(stack.sp==stack.size) { printf("\nStack is Full");
getch();
return(stack);
}
else stack.item[stack.sp++]=item;
return(stack);
}
- Стекээс элемент хасах
struct MStack Dell(struct MStack stack)
{ if(stack.sp==0) printf("\nStack is Empty");
else { stack.sp--;
printf("\nDeleted value is =%d,stack.item[stack.sp]");
getch();
} return(stack);
}
Дээрх функцуудийг ашигласан жишээ код :
#include<stdio.h>
#include<conio.h>
main()
{ struct MStack stack;
char key;
int val;
stack.sp=0;
do
{ clrscr();
printf("\n1 Add 2 Delete 3 Top 4 Create 0 Exit");
key=getch();
switch(key)
{ case'0':clrscr(); return(0);
case'1':printf("\nInput number=");
scanf("%d",&val);
stack=Add(stack,val); break;
case'2':stack=Del(stack); break;
case'3':printf("\nTop value is=%d",top(stack));
getch(); break;
case'4':printf("\nInput stack size=");
scanf("%d",&val);
stack=Create(stack,val);
break;
}
}while(l==1)
}
ЗААГЧ АШИГЛАН СТЕК ЗОХИОН БАЙГУУЛАХ
- Стект элемент нэмэх
void Add(int item)
{ N_Stack *p;
p=(N_stack)malloc(sizeof(N_Stack));
p->val=item;
p->next=q;
q=p;
}
- Стекийн оройн элемент харуулах
void top()
{ if(q!=NULL) printf("Top of stack %d",q->val);
getch();
}
void print()
{ if(q==NULL) { printf("\nStack is Empty"); getch(); }
else
{ printf("\nValue : %d",q->val);
getch();
q=q->next;
}
}
- Стек шалгах
void Empty()
{ if(q!=NULL) printf("\nStack is not Empty");
else printf("Empty stack");
getch();
}
Дээрхи функцуудыг ашигласан жишээ код :
#include<stdio.h>
typedef struct N_Stack
{ int val;
struct N_stack next;
}N_Stack;
N_Stack *q;
main()
{ int n=1,item;
char key;
q=NULL;
while(n)
{ clrscr();
printf("\nAdd 1: Top 2: Print&Del 3: Empty 4: Quit 5:");
key=getch();
switch(key)
{ case'1':printf("\nInput Value");
scanf("%d",item);
Add(item); break;
case'2':Top(); break;
case'3':print(); break;
case'4':Empty(); break;
case'5':exit(0);
}
}
}
ЖИШЭЭ - 1 : Хаалтны баланс шалгах
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct H
{ char data;
struct H *next;
}point;
void push(char);
char pop();
point *stack=NULL;
void main()
{ char *s;
int n;
s=(char *)malloc(20);
printf("\nInput Expression");
gets(s);
while(*s)
{ switch(*s)
{ case'[':case'(':case'{': push(*s); break;
case']':if(pop()!='[') printf("\nError"); break;
case')':if(pop()!='(') printf("\nError"); break;
case'}':if(pop()!='{') printf("\nError"); break;
}s++;
} if(stack) printf("\nstack is not Empty");
else printf("ok");
}
void push(char ch)
{ point *q;
q=(point *)malloc(sizeof(point));
q->data=ch;
q->next=stack;
stack=q;
}
char pop()
{ char ch;
point *q;
if(stack){ ch=stack->data;
q=stack;
stack=stack->next;
free(q);
return(ch);
}
return(0); }
No comments:
Post a Comment