Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로그래밍
- 버그바운티
- 버그헌팅
- 정보보호
- C언어
- xcz
- hacking
- 포렌식
- CTF
- 정보보안
- nefus
- 자료구조
- wargame.kr
- 워게임
- 선린인터넷고등학교
- 해킹
- WarGame
- 포너블
- 시스템
- 문제풀이
- webhacking.kr
- 네퓨즈
- 웹해킹
- webhacking
- DVP
- 코드게이트
- 보안
- kangsecu
- 블록체인
- Pwnable
Archives
- Today
- Total
kangsecu's B1og
c언어 자료구조 - stack 본문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int element; //int를 element라는 이름으로 새롭게 만듦for 가독성 typedef struct StackNode { element item; struct StackNode *link; } StackNode; typedef struct { StackNode *top; //stacknode 타입의 링크만 있다. } LinkedStackType; // 초기화 함수 void init(LinkedStackType *s) { s->top = NULL; // 스택이 초기화 되는 것은 빈것과 같다. } // 공백 상태 검출 함수 int is_empty(LinkedStackType *s) { return (s->top == NULL); // 스택의 탑이 NULL이면 스택이 빈겁니다. } // 포화 상태 검출 함수 int is_full(LinkedStackType *s) { return 0; // 배열을 쓰는 경우만 구현하는 함수 } // 삽입 함수 void push(LinkedStackType *s, element item) { StackNode *temp = (StackNode *)malloc(sizeof(StackNode)); //temp라는 임시노드를 stacknode크기로 만듦, stacknode타입의 포인터로 만들어서 사용 if (temp == NULL){ fprintf(stderr, "메모리 할당에러\n"); return; } else{ temp->item = item; // 넣어야 할 값 item을 임시 노드의 item에 넣어준다. temp->link = s->top; // temp의 링크에 현재 top이 가르키고 있는 값을 넣고 s->top = temp; // temp의 주소를 스택의 top이 가지도록 한다. } } // 삭제 함수 element pop(LinkedStackType *s) { if (is_empty(s)) { fprintf(stderr, "스택이 비어있음\n"); exit(1); } else{ StackNode *temp = s->top; // 현재 스택의 탑 주소를 스택노드 타입 변수에 임시 저장한다. element item = temp->item; // 그리고 temp의 item 값을 저장하고. s->top = temp->link; // 현재 스택의 탑 노드의 링크에 담겨 있는 주소, 즉 다음 노드의 주소를 top이 가르키도록 한다. free(temp); //가지고온 노드를 free해 줘야 한다. return item; } } // 피크 함수 element peek(LinkedStackType *s) { if (is_empty(s)) { fprintf(stderr, "스택이 비어있음\n"); exit(1); } else{ return s->top->node; //스택 s의 맨 위에 있는 값을 리턴하믄 되겠지? } } // 주 함수 void main() { LinkedStackType s; init(&s); push(&s, 1); push(&s, 2); push(&s, 3); printf("%d\n", pop(&s)); printf("%d\n", pop(&s)); printf("%d\n", pop(&s)); printf("%d\n", is_empty(&s)); } | cs |
'Programming > c언어' 카테고리의 다른 글
자료구조 - sorting (0) | 2020.04.19 |
---|---|
c언어 자료구조 - 괄호식검사 (0) | 2019.03.25 |
C언어 자료구조 - 링크드리스트 (0) | 2019.03.22 |
C언어 - 조건문 정리 (1) | 2017.12.18 |
c언어- 반복문 for (0) | 2017.02.26 |