#include<stdio.h> #include<stdlib.h> #include<string.h> //int를 스택 element의 자료형으로 정의 //이유 다른 자료형을 사용하기 편하게 하기 위해 typedef int element; //스택의 노드 구조 정의 typedef struct stackNode { //정수형 타입 데이터(데이터 필드) element data; //노드 포인터(링크 필드) struct stackNode *link; }stackNode; //스택의 top노드를 지정하기 위한 포인터 top 선언 stackNode* top; //스택 삽입 연산 void push(element item) { //메모리 할당(할당한 주소 temp에 넣음) stackNode* temp=(stackNode *)malloc(sizeof(stackNode)); //데이터를 temp의 데이터필드 에 넣음 temp -> data = item; //tmep의 주소를 top에 넣어줌 temp -> link = top; top = temp; } //스택의 삭제 후 반환 연산 element pop() { element item; stackNode* temp=top; //현재 스택이 공백 리스트인 경우 if(top == NULL) { printf("\n\n Stack is empty !\n"); return 0; } //현재 스택이 공백 리스트가 아닌 경우 else{ //item에 temp의 데이터를 줌 item = temp->data; //top에 temp의 링크를 줌(밑의 원소를 가르키게 됨) top = temp->link; //메모리에서 삭제 free(temp); //자료값 리턴 return item; } } //스택의 top 원소 검색 연산 element peek() { element item; //현재 스택이 공백 리스트인 경우 if(top == NULL) { printf("\n\n Stack is empty ! \n"); return 0; } //현재 스택이 공백 리스트가 아닌 경우 else { //top의값을 item에 넣어줌 item = top->data; //top의 값 리턴 return item; } } //스택의 삭제 연산(리턴 X) void del() { stackNode* temp; //현재 스택이 공백 리스트인 경우 if(top == NULL) { printf("\n\n Stack is empty !\n"); } //현재 스택이 공백 리스트가 아닌 경우 else { temp = top; top = top->link; //메모리 삭제 free(temp); } } //스택의 내용 출력 연산 void printStack() { //p는 top이랑 같음 stackNode* p=top; printf("\n STACK [ "); //NULL이 아닐때 까지 while(p){ printf("%d ",p->data); //다음 주소로 p = p->link; } printf("] "); } void main(void) { //초기값 item선언, top은 NULL로 초기화 element item; top = NULL; printStack(); push(1); printStack(); push(2); printStack(); push(3); printStack(); item = peek(); printStack(); printf("peek top => %d", item); del(); printStack(); item = pop(); printStack(); printf("\t pop top => %d", item); item = pop(); printStack(); printf("\t pop top => %d", item); pop(); getchar(); }
반응형
'프로그래밍' 카테고리의 다른 글
Win32Api_달력 (0) | 2013.11.20 |
---|---|
연결 자료구조를 이용하여 구현한 스택 프로그램(1~50까지의 소수 스택 삽입) (0) | 2013.11.19 |
Win32_Api 기본형 (0) | 2013.11.14 |
error C2440: '=' : 'LPSTR'에서 'LPCWSTR'(으)로 변환 (0) | 2013.11.14 |
수식의 괄호의 쌍을 검사하는 프로그램 (0) | 2013.11.13 |