# 연결리스트를 이용한 스택
LinkedListStack.cpp
연결리스트를 이용해 스택을 구현 할 경우 크기의 제한을 두지 않고 사용 할 수 있다는 장점이 생긴다.
구현 방법은 내부적으로만 달라질뿐 외부 인터페이스는 배열을 이용한 것과 완전 동일하다.
메모리를 동적할당해서 사용하기 때문에 포화상태를 검출하는 함수는 필요가 없어진다.
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;
}
'컴퓨터 기술 > 자료구조' 카테고리의 다른 글
자료구조 :: 스택(4) 스택을 이용한 표기식 변환과 연산 (0) | 2010.06.22 |
---|---|
자료구조 :: 스택(3) 배열 스택을 이용한 괄호검사 (0) | 2010.06.22 |
자료구조 :: 스택(1) 배열을 이용한 스택 (0) | 2010.06.22 |
자료구조 :: 리스트(5) 연결리스트를 이용한 다항식 (0) | 2010.06.22 |
자료구조 :: 리스트(4) 이중 연결리스트 (0) | 2010.06.21 |
댓글 로드 중…