학생의 이름, 주소, 학번을 하나의 구조체로 묶어서 구조체 스택배열로 3명의 정보 저장 후 모든 학생의 정보 출력 후
1명을 삭제하고 삭제한 학생의 정보 출력시키기
핵심: 각 구조체 배열스택 내부의 문자열을 어떻게 입력받을까?
strcpy이용하기
1) 입력받지않고 직접 설정 하기
strcpy(stack[i].name,"홍길동");
2) 입력받아서 저장하기
방법1: scanf("%s",stack[i].name);
방법2: char name[10]; scanf("%s",name); strcpy(stack[i].name,name);
주의
2) 방법 사용시
stack[i].name =name; => 잘못된 코드
배열의 주소값을 임의로 다른 주소로값으로 지정할 수 없음! => strcpy함수 이용하기
코드
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 | #pragma warning(disable:4996) #include<stdio.h> #include<string.h> #include<stdlib.h> #define max 5 typedef struct { char name[10]; char add[10]; int id; }info; int top = -1; info stack[max]; void push(info item); info pop(); int is_full(); void show(); int main() { info std_info; for (int i = 0; i < 3; i++) { scanf("%s%s%d", std_info.name, std_info.add, &std_info.id); push(std_info); } show(); std_info = pop(); printf("삭제한 학생의 이름은%s\n", std_info.name); printf("삭제한 학생의 주소는%s\n", std_info.add); printf("삭제한 학생의 학번은%d\n", std_info.id); } void push(info item) { if (is_full()) { fprintf(stderr, "원소가 다찼어요\n"); return; } stack[++top] = item; } int is_full() { if (top == max - 1) // 찼으면 -1 , 아니면 0반환 return 1; else return 0; } int is_empty() { return top == -1; //비었으면 1 , 아니면 0 반환 } info pop() { if (is_empty()) { fprintf(stderr, "원소가 없어요\n"); exit(1); } return stack[top--]; } void show() { if (is_empty()) { fprintf(stderr, "원소가 없어요\n"); return; } for (int i = 0; i <= top; i++) { printf("이름:%s 주소:%s 학번:%d\n", stack[i].name, stack[i].add, stack[i].id); } } | cs |
결과
'자료구조 > 스택' 카테고리의 다른 글
중위 수식을 후위 수식으로 변환하는 프로그램 (0) | 2020.04.09 |
---|---|
스택을 이용한 후위 표기식 계산 프로그램 (0) | 2020.04.09 |
스택을 이용한 괄호검사 프로그램 (0) | 2020.04.09 |
top변수와 스택배열을 구조체로묶은 스택 구현 (0) | 2020.04.09 |
전역 변수를 이용한 간단한 스택 구현 (0) | 2020.04.09 |