stack
Last In First Out(후입 선출의 형태)
stack에로의 삽입 함수
stack으로부터 삭제 함수
설명: 스택으로 삽입 할때는 스택을 하나증가시킨후 삽입
삭제시는 나중에 들어간 item을 빼낸후 스택을 하나 감소 시킨다.
동적연결된 스택(linked list로 구현된 스택)
삽입 함수
삭제함수
Last In First Out(후입 선출의 형태)
#define MAX_STACK_SIZE 100
typedef struct{
int key;
}element;
element stack[MAX_STACK_SIZE];
int top = -1;
로 정의 되어있을때.typedef struct{
int key;
}element;
element stack[MAX_STACK_SIZE];
int top = -1;
stack에로의 삽입 함수
void add(int* top,element item)
{/*전역스택에 item을 삽입*/
if(*top>=MAX_STACK_SIZE-1){
stack_full()'
return;
}
stack[++*top];
}
{/*전역스택에 item을 삽입*/
if(*top>=MAX_STACK_SIZE-1){
stack_full()'
return;
}
stack[++*top];
}
stack으로부터 삭제 함수
element delete(int* top)
{
if(*top == 1)
return stack_empty(); //오류키를 반환
return stack[(*top)--];
}
{
if(*top == 1)
return stack_empty(); //오류키를 반환
return stack[(*top)--];
}
설명: 스택으로 삽입 할때는 스택을 하나증가시킨후 삽입
삭제시는 나중에 들어간 item을 빼낸후 스택을 하나 감소 시킨다.
일반적인 배열스택프로그램
동적연결된 스택(linked list로 구현된 스택)
#define MAX_STACKS 10
typedef struct
{
int key;
}element;
typedef struct stack* stack_pointer;
typedef struct stack{
element item;
stack_pointer link;
};
stack_pointer top[MAX_STACKS];
삽입 함수
void add(stack_pointer *top,element item)
{//스택의 top에 원소를 삽입
stack_pointer temp=(stack_pointer)malloc(sizeof(stack)); //메모리동적할당
if(IS_FULL(temp)){
fprintf(stderr,"메모리풀\n");
exit(1);
}
temp->item=item;
temp->link=*top;
*top=temp;
}
{//스택의 top에 원소를 삽입
stack_pointer temp=(stack_pointer)malloc(sizeof(stack)); //메모리동적할당
if(IS_FULL(temp)){
fprintf(stderr,"메모리풀\n");
exit(1);
}
temp->item=item;
temp->link=*top;
*top=temp;
}
삭제함수
element delete(stack_pointer,element item)
{//스택으로부터 원소를 삭제
stack_pointr temp=*top;
element item;
if(IS_EMPTY(temp)){
fprintf(stderr,"스텍이 비었음\n");
exit(1);
}
item=temp->item;
*top=temp->link;
free(temp); // 메모리반환
return item;
}
{//스택으로부터 원소를 삭제
stack_pointr temp=*top;
element item;
if(IS_EMPTY(temp)){
fprintf(stderr,"스텍이 비었음\n");
exit(1);
}
item=temp->item;
*top=temp->link;
free(temp); // 메모리반환
return item;
}
연결된 스택 프로그램