June is Combung

스택과 연결리스트 본문

C 자료구조와 알고리즘

스택과 연결리스트

june__Park 2021. 6. 29. 18:56
#include <stdio.h>
#include <stdlib.h>  // malloc(), free()
#include <Windows.h>  // system() 

typedef struct node {
	int data;
	struct node* next;
} NODE;

NODE* top = NULL; // 가장 마지막에 추가된 구조체(의 주소)를 가리킬 변수

NODE* init(int data){
	NODE* tmp = (NODE*)malloc(sizeof(NODE));
	tmp->data = data;
	tmp->next = NULL;
	return tmp;
}

void print_all(){
	NODE* tmp = top;
	while(tmp){
		printf("%d ", tmp->data);
		tmp = tmp->next;
	}
	printf("\n");
}
void push(int data){
	
	NODE* new_node = init(data);
	if(top){
		new_node->next = top;
	}
	top = new_node;
}
void pop(){
	if(!top){ // top == NULL
		printf("Stack Underflow! \n");
		return;
	}
	NODE* tmp = top;
	top = top->next;
	free(tmp); 
}
void peek(){
	printf("%d 가 처리될 차례~ \n", top->data);
}

void main(){
	int data;
	int select;
	while(1){
		print_all();
		printf("1. push() \n");
		printf("2. pop() \n");
		printf("3. peek() \n");
		printf("0. exit \n");
		printf("입력 : "); 
		scanf_s("%d", &select);
		switch(select){
		case 1:
			printf("추가할 정수 : "); scanf_s("%d", &data);
			push(data);
			break;
		case 2:
			pop();
			break;
		case 3:
			peek();
			break;
		case 0:
			exit(0);
		}
		system("pause");
		system("cls");
	} // while
} // main()

'C 자료구조와 알고리즘' 카테고리의 다른 글

Queue 연결리스트  (0) 2021.06.29
연결리스트(중간 노드 삽입 삭제) 단일포인터 버전  (0) 2021.06.29
스택과 시간복잡도  (0) 2021.06.29
동적할당  (0) 2021.06.29
구조체  (0) 2021.06.29
Comments