자료 저장소

# 연결리스트를 이용한 스택

LinkedListStack.cpp

연결리스트를 이용해 스택을 구현 할 경우 크기의 제한을 두지 않고 사용 할 수 있다는 장점이 생긴다.
구현 방법은 내부적으로만 달라질뿐 외부 인터페이스는 배열을 이용한 것과 완전 동일하다.
메모리를 동적할당해서 사용하기 때문에 포화상태를 검출하는 함수는 필요가 없어진다.

#include <stdio.h> 
#include <stdlib.h>

typedefstruct StackNode
{
int data;
StackNode *link;
}StackNode;

typedefstruct LinkedStackType
{
StackNode *top;
}LinkedStackType;


void Init(LinkedStackType *s)
{
s->top=NULL;
}

int Is_empty(LinkedStackType *s)
{
return (s->top == NULL);
}

void Push(LinkedStackType *s,int data)
{
StackNode *temp=(StackNode*)malloc(sizeof(StackNode));
if(temp == NULL)
{
printf("메모리 할당 에러");
return ;
}

temp->data=data;
temp->link=s->top;
s->top=temp;
}

int Pop(LinkedStackType *s)
{
if(Is_empty(s))
{
printf("스택이 비어있습니다\n");
return -1;
}

StackNode *remove = s->top;
int tmp = s->top->data;
s->top = s->top->link;
free(remove);

return tmp;
}

int Peek(LinkedStackType *s)
{
if(Is_empty(s))
{
printf("스택이 비어있습니다\n");
return -1;
}

return s->top->data;
}

int main()
{
LinkedStackType s;

int i;

Init(&s);

printf("현재 스택의 공간 비어있는가? %c\n",Is_empty(&s) ? 'Y' : 'N');

for(i=0;i<10;i++)
{
printf("Push : %d\n",i);
Push(&s,i);
}

for(i=0;i<10;i++)
printf("Pop : %d\n",Pop(&s));

printf("현재 top의 위치는 %d\n",Peek(&s));

return0;
}





댓글 로드 중…

최근에 게시된 글