2차원 배열
-2차원 배열은 1차원 배열을 여러개 연결한 것 , 첨자를 2개 사용하는 배열
ex) int aa[3][4]
aa[0][0] | aa[0][1] | aa[0][2] | aa[0][3] |
aa[1][0] | aa[1][1] | aa[1][2] | aa[1][3] |
aa[2][0] | aa[2][1] | aa[2][2] | aa[2][3] |
#include <stdio.h>
int main() {
int aa[3][4];
aa[0][0] = 1; aa[0][1] = 2; aa[0][2] = 3; aa[0][3] = 4;
aa[1][0] = 5; aa[1][1] = 6; aa[1][2] = 7; aa[1][3] = 8;
aa[2][0] = 9; aa[2][1] = 10; aa[2][2] = 11; aa[2][3] = 12;
printf("aa[0][0]부터 aa[2][3]까지 출력 \n");
printf("%3d %3d %3d %3d\n", aa[0][0], aa[0][1], aa[0][2], aa[0][3]);
printf("%3d %3d %3d %3d\n", aa[1][0], aa[1][1], aa[1][2], aa[1][3]);
printf("%3d %3d %3d %3d\n", aa[2][0], aa[2][1], aa[2][2], aa[2][3]);
}
위처럼 직접 입력시 코드 입력이 너무 번거로워 지므로 for문을 사용하여 입력할수도 있다
#include <stdio.h>
int main() {
int aa[3][4];
int i, k;
int val = 1;
for (i = 0; i < 3; i++) {
for (k = 0; k < 4; k++) {
aa[i][k] = val;
val++;
}
}
printf("aa[0][0]부터 aa[2][3]까지 출력\n");
for (i = 0; i < 3; i++) {
for (k = 0; k < 4; k++) {
printf("%3d", aa[i][k]);
}
printf("\n");
}
}

응용 - 문자열 내 특정 문자의 변환
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
char ch1, ch2;
int i;
printf("여러 글자를 입력 : ");
gets(str);
printf("기존 문자와 새로운 문자 : ");
scanf("%c %c", &ch1, &ch2);
for (i = 0; i < strlen(str); i++) {
if (str[i] == ch1) {
str[i] = ch2;
}
}
printf("변환된 결과 ==> %s \n", str);
}

스택
-스택은 한쪽 끝이 막혀있는 구조, 가장 나중에 들어간 것이 가장 먼저 나오는 구조 LIFO : (Last In First Out)
데이터를 넣는 것을: push
데이터를 빼는것: pop
다음의 들어갈 데이터의 위치: top
스택을 코드로 구현한 예 1 )
#include <stdio.h>
int main() {
char stack[5];
int top = 0;
stack[top] = 'A';
printf(" %c 자동차가 터널에 들어감\n ", stack[top]);
top++;
stack[top] = 'B';
printf(" %c 자동차가 터널에 들어감\n", stack[top]);
top++;
stack[top] = 'C';
printf(" %c 자동차가 터널에 들어감\n", stack[top]);
top++;
printf("\n");
top--;
printf(" %c 자동차가 터널을 빠져나감\n", stack[top]);
stack[top] = ' ';
top--;
printf(" %c 자동차가 터널을 빠져나감\n", stack[top]);
stack[top] = ' ';
top--;
printf(" %c 자동차가 터널을 빠져나감\n", stack[top]);
stack[top] = ' ';
}

while문과 switch case 문을 사용하여 만든 예 )
#include <stdio.h>
int main() {
char stack[5];
int top = 0;
char carName = 'A';
int select = 9;
while (select != 3) {
printf("<1> 자동차 넣기 <2> 자동차 빼기 <3> 끝 :");
scanf("%d", &select);
switch (select) {
case 1:
if (top >= 5) {
printf("터널이 꽉 차서 차가 못 들어감 \n");
}
else {
stack[top] = carName++;
printf(" %c 자동차가 터널에 들어감 \n", stack[top]);
top++;
}
break;
case 2:
if (top <= 0) {
printf("빠져나갈 자동차가 없음 \n");
}
else {
top--;
printf(" %c 자동차가 터널에서 빠짐 \n", stack[top]);
stack[top] = ' ';
}
break;
case 3:
printf("현재 터널에 %d대가 있음. \n", top);
printf("시스템을 종료합니다. \n");
break;
default :
printf("잘못 입력했습니다. 다시 입력하세요");
}
}
}

메모리와 주소