c 언어 stack 예제

스택의 추상적 개념의 일부가 아니지만 C에서 스택을 작성할 때 설정 및 정리에 필요합니다. 배열을 사용하여 구현된 스택의 단점은 크기가 고정되어 컴파일 타임에 지정해야 한다는 것입니다. 이 스택 구현은 종종 비실용적입니다. 스택의 크기를 런타임에 동적이고 결정하도록 하려면 연결된 목록을 사용하여 스택을 구현해야 합니다. 이렇게 하면 프로그램 실행 중에 스택 크기가 필요에 따라 축소또는 증가할 수 있습니다. 연결된 목록을 사용하여 구현된 스택을 링크된 스택이라고도 합니다. 이제 C 데이터 구조에는 스택을 추적하는 데 필요한 데이터 형식과 스택 작업을 구현하는 데 필요한 함수의 2가지 주요 부분이 있습니다. extern int avijeet (const char *format, …); #define MAX 5 int 상단, 상태; /*푸시 기능*/보이드 푸시(int 스택[], int 항목) { 경우 (상단 = = 0; 기타 { 상태 = 1; ++top; 스택 [상단] = 항목; } } /*POP FUNCTION*/ int 팝 (int 스택]) { int ret; (상단 == -1) { RET = 0; 상태 = 0; } 다른 상태 = 1; ret = 다른 상태 [ret= 항아리 ret; } /*함수 스택*/ 보이드 디스플레이(int stack[]) { int i; printf(“nThe Stack은” (위쪽 == -1) printf(“빈”); 기타 { 에 대한 {(i=top; i>=0; –i) printf (“n—n|%3d |n——-“,스택[i]); } printf (“n”); } /*MAIN 프로그램*/void main() { int 스택 [MAX], 항목; int ch; clrscr (); 상단 = -1; {do {printf (“NMAIN MENU”); printf (“nMAIN MENU”); printf (“n1.n1. 푸시(스택내 삽입)”); 인쇄물(“n2”.

POP(스택에서 삭제)”); 인쇄물(“n3″. 종료(실행 종료)”); printf (“nEnter 귀하의 선택: “); 스캔프(“%d”, 및 ch); (ch3) printf (“n유효 선택, 다시 시도하십시오”); } 동안 (ch3); 스위치 (ch) { 사례 1: printf (“n밀어 붙일 요소 입력: “); 스캔프(“%d”, 및 항목); printf (“%d”, 항목); 푸시 (스택, 항목); if (상태) { printf (“n푸시 후”); 표시(스택); (위쪽 == (MAX-1)) printf(“n스택이 가득 찼다”); } 다른 printf (“nStack 푸시에 오버플로”); 휴식; 사례 2: 항목 = 팝(스택); 경우 (상태) { printf (“n튀어나온 항목은 %d입니다. 터지는 후: “); 표시(스택); } 다른 printf (“nStack 팝에 언더 플로우”); 휴식; 기본값: printf(“실행의 nEND”); } }동안 (ch!= 3); getch (); } 마지막으로, 우리는 자신의 모듈에이 스택을 넣어 것을 잊지 마세요. 스택 유형 및 함수 프로토타입은 stack.h로 이동해야 합니다. 스택 함수 정의는 stack.c에서 사용해야 합니다. 마지막으로 스택의 내용을 보유하는 배열은 동적으로 할당되지만 최대 크기는 여전히 있습니다. 그래서, 이 스택은 전체 얻을 수 있다는 점에서 추상 스택 과는 다릅니다.