/*
* http://sosal.tistory.com/
* made by so_Sal
*/
연결리스트로 간단하게 스택을 구현해보려고 합니다.
음;; 걍 손 가는대로 무작정 쳐보니 대충 돌아가네요
#include<iostream>
using namespace std;
class node{
private:
char value; //간단하게 알파벳 저장하는 스택의 노드~
public:
node(int a){ // 생성자 함수를 이용하여 value 초기화
value = a;
}
char getValue(){ // 값을 얻어오기 위한 함수
return value;
}
node *next; // 다음 노드를 가리킬 포인터
node *prev; // 이전 노드를 가리킬 포인터
};
node *first;
node *last;
int count=0;
void push(char val);
void pop();
void print();
int menu();
int main(){
int num;
char val;
while(1){
num = menu();
switch(num){
case 1:
cout<<"문자열을 입력해주시오 : ";
cin>>val;
push(val);
break;
case 2:
pop();
break;
case 3:
print();
break;
case 4:
return 0;
break;
default:
break;
}
}
return 0;
}
void push(char val){
node *newNode = new node(val); //노드 생성
newNode->next=NULL;
newNode->prev=NULL;
if(count==0){ // 첫번째 노드라면
first=newNode; // 첫째와 끝 모두를 같은 노드로!
last=newNode;
}
else{
last->next=newNode; // 두번째 이상의 노드라면
newNode->prev=last;
last=last->next; // 제일 마지막 노드의 바로 다음 노드로 push
}
count++;
}
void pop(){
node* del; // 연결 끊은 후에도 계속 가리킬 포인터
del=last;
last=last->prev; // 연결 끊기!
delete del; // 삭제 크리!
count--;
}
void print(){
node* cur=last;
cout<<"\t\t┌─┐"<<endl;
for(int i=0;i<count;i++){
cout<<"\t\t│"<<cur->getValue()<<" │"<<endl;
if(cur->prev != NULL)
cur=cur->prev;
else
break;
}
cout<<"\t\t└─┘"<<endl;
}
int menu(){
int val;
cout<<"[1]:Push, [2]Pop, [3]print, [4]exit :: ";
cin>>val;
return val;
}
푸쉬, 팝이 젤 중요한거 아니겠습니까 ㅎㅎ 푸쉬파압!푸쉬파압!
print 할때 살~짝 꾸며보긴 했는데.. 흠..
cmd창의 한계네요 ㅋㅋ
'Programing > C- programing' 카테고리의 다른 글
트리 : 좌우 child를 가지는 트리 만들기 (0) | 2010.08.19 |
---|---|
큐 : 링크드 리스트로 구현한 간단한 큐 (0) | 2010.08.19 |
스택 :: 가장 기본적인 형태. 배열 (0) | 2010.08.19 |
링크드리스트 :: 추가된 리스트 원하는 위치에서 삭제, 찾기, 바꾸기 (0) | 2010.08.19 |
링크드 리스트의 추가,출력,삭제,찾기,바꾸기 소스 (0) | 2010.08.19 |