일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 포인터
- dart 언어
- Algorithm
- github
- docker
- c# winform
- HTML
- c# 추상 클래스
- git
- Flutter
- jupyter lab
- Unity
- Houdini
- c#
- C++
- Data Structure
- c# 윈폼
- Python
- 유니티
- 깃
- vim
- C# delegate
- C언어 포인터
- gitlab
- 다트 언어
- c언어
- 도커
- 플러터
- jupyter
- 구조체
Archives
- Today
- Total
nomad-programmer
[C] 동적 할당으로 간단히 구현해본 stack 본문
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdbool.h>
void SetData(unsigned short** dst, unsigned short** src, const short size) {
for (int i = 0; i < size; i++) {
*(*(dst)+i) = *(*(src)+i);
}
}
void Push(unsigned short** ptr, short* curt, const short value) {
(*curt)++;
unsigned short* new_data = (unsigned short*)malloc(((*curt) + 1) * sizeof(short));
SetData(&new_data, ptr, *curt);
*(new_data + (*curt)) = value;
if (NULL != (*ptr)) {
free(*ptr);
}
*ptr = new_data;
}
short Pop(unsigned short** ptr, short* curt) {
if ((*curt) == -1) {
return -1;
}
int tmp;
tmp = *(*(ptr)+(*curt));
(*curt)--;
if ((*curt) < 0) {
free(*ptr);
*ptr = NULL;
return tmp;
}
unsigned short* new_data = (unsigned short*)malloc(((*curt) + 1) * sizeof(short));
SetData(&new_data, ptr, (*curt+1));
free(*ptr);
*ptr = new_data;
return tmp;
}
int main(void) {
unsigned short* stack = NULL;
short curt = -1;
short tmp;
while (true) {
fputs("stack에 저장할 데이터(press -1 to exit): ", stdout);
scanf_s("%hd", &tmp);
if (tmp == -1) {
break;
}
Push(&stack, &curt, tmp);
}
puts("");
while (true) {
tmp = Pop(&stack, &curt);
if(tmp < 0){
break;
}
printf("stack에 저장 된 값: %hd\n", tmp);
}
if (NULL != stack) {
free(stack);
}
return 0;
}
// 결과
/*
stack에 저장할 데이터(press -1 to exit): 1
stack에 저장할 데이터(press -1 to exit): 5
stack에 저장할 데이터(press -1 to exit): 7
stack에 저장할 데이터(press -1 to exit): 9
stack에 저장할 데이터(press -1 to exit): 15
stack에 저장할 데이터(press -1 to exit): 255
stack에 저장할 데이터(press -1 to exit): 1024
stack에 저장할 데이터(press -1 to exit): -1
stack에 저장 된 값: 1024
stack에 저장 된 값: 255
stack에 저장 된 값: 15
stack에 저장 된 값: 9
stack에 저장 된 값: 7
stack에 저장 된 값: 5
stack에 저장 된 값: 1
*/
동적 할당으로 정말 간단히 구현해 본 stack 자료구조 같은 데이터 저장
'Programming > C' 카테고리의 다른 글
[C] 3차원 배열 같은 3차원 포인터의 동적 할당 (0) | 2020.06.13 |
---|---|
[C] 2차원 배열 같은 2차원 포인터의 동적 할당 (0) | 2020.06.13 |
[C] 동적 할당 (malloc, free) (0) | 2020.06.11 |
[C] 2차원 배열의 주소 값을 저장할 수 있는 포인터 (0) | 2020.06.10 |
[C] int형 배열의 요소를 원하는 바이트만큼 변경 (0) | 2020.06.10 |
Comments