on
스택 (연결리스트로 구현)
스택 (연결리스트로 구현)
'백준 10828번: 스택' 문제를 베이스로 둔 배열로 구현한 스택의 코드다.
size() 함수는 구현이 가능한지 몰라서 일단 알아오고 다시 수정하겠다..ㅠ
연결리스트 스택은 구조체와 기본 배열로 구현한 스택과 달리 크기에 제약이 없어 full() 함수 구현이 불가능하다.
//스택을 연결리스트로 구현하기 //push X: 정수 X를 스택에 넣는 연산이다. //pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. //size -> 구현이 가능한가..? 더 생각해보고 다시 쓰겠다. //full -> 연결리스트로 스택을 구현하면 full함수를 구현할 수 없다. //empty: 스택이 비어있으면 1, 아니면 0을 출력한다. //peak: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. #include #include #include typedef struct Stack{ //스택 구현할 연결리스트 노드 구조체 정의 int data; struct Stack* link; //다음 노드를 가리키는 포인터 변수 }Stack; Stack* top; //top 노드를 가리킬 포인터 변수, 기본 값은 NULL int empty() { if(top==NULL) //기본 값이 NULL. 다른 스택 구현 예로 top==-1 상태 return 1; return 0; } void push(int num) { Stack* newnode = (Stack*)malloc(sizeof(Stack)); //동적할당 newnode->data=num; //newnode의 data값에 num값 저장 newnode->link=top; //newnode의 link에 맨 위의 노드 주소 저장(이전 값으로 보냄) top=newnode; //newnode가 맨위 노드이므로 값 넣어주기 } int pop() { if(empty()==1) return -1; //비어있지 않은 경우 Stack* temp = top; //temp 포인터 변수를 선언해 맨 위의 노드 주소값 저장 int newdata = temp->data; //data 변수 새로 선언: newdata, 맨 위의 노드 데이터 저장 top=temp->link; //top 포인터에 맨 위에서 두번째에 있는 노드의 주소값 저장 free(temp); //맨 위 노드 제거 return newdata; } //int size() -> 구현이 가능한지 모르겠어서 더 생각해보고 가능하면 넣고 안되면 안된다 수정하겠다. //int full() -> 연결리스트는 스택의 크기에 제약이 없으므로 full 함수 구현이 불가능하다. int peak() { if(empty()==1) return -1; return top->data; } int main(void) { char Get_Com[10]; int N,pushnum; scanf("%d",&N;); for(int i=0;i
",pop()); else if(strcmp(Get_Com,"empty")==0) printf("%d
",empty()); else if(strcmp(Get_Com,"peak")==0) printf("%d
",peak()); } return 0; }
연결리스트를 잘 몰라서 https://rpatm.tistory.com/41를 참조하면서 작성했다.
from http://coding-doomchicken.tistory.com/11 by ccl(A) rewrite - 2021-12-23 01:01:04