c 언어 스택 예제

더 복잡한 다른 작업이 스택에 적합하지 않을 것으로 간주합니다. 예를 들어 스택이 넘어질 수 있으므로 위에서 3번째 책을 직접 꺼낼 수 없습니다. 여기서 C에서 스택의 배열 표현을 위한 프로그램을 얻을 수 있습니다. 우리는 당신을 위해 전체 스택 모듈을 작성했습니다 (stack.h 및 stack.c). 또한, 여기에 샘플 메인 프로그램 stacktest.c와 메이크 파일입니다. void 푸시 (int stack[], int 항목) { 경우 (상단 = = (MAX-1)) 상태 = 0; 기타 { 상태 = 1; ++상단; 스택 [상단] = 항목; } } 배열 구현을 위해 배열 내용과 상위 인덱스를 추적해야 합니다. 이 2를 스택T 형식의 단일 C 구문으로 결합하는 방법은 무엇입니까? 우리는 물리적 인 비유의 관점에서 스택을 생각하기 때문에, 우리는 일반적으로 수직으로 그립니다 (그래서 상단은 정말 상단에). 스택 함수를 스택에 전달할 때 참조로 전달합니다: 배열을 사용하여 구현된 스택의 단점은 크기가 고정되어 컴파일 타임에 지정해야 한다는 것입니다. 이 스택 구현은 종종 비실용적입니다. 스택의 크기를 런타임에 동적이고 결정하도록 하려면 연결된 목록을 사용하여 스택을 구현해야 합니다. 이렇게 하면 프로그램 실행 중에 스택 크기가 필요에 따라 축소또는 증가할 수 있습니다. 연결된 목록을 사용하여 구현된 스택을 링크된 스택이라고도 합니다.

스택 함수의 세부 사항을 숙고하기 전에 필요한 형식을 결정해야 합니다… 이 배열은 충분합니까, 아니면 스택에 대한 자세한 정보를 저장해야 합니까? 스택의 구별되는 특성 중 하나이며 유용하게 만드는 것은 요소가 스택에서 나오는 순서입니다. 문자 더미를 보면서 어떤 순서를 볼 수 있습니다… C 프로그래밍 언어로 이 스택을 구현하는 방법에 대해 생각해 보겠습니다. 지금, 우리가 스택에 뭔가를 밀어 가정, 푸시 (스택, C`), 주는: 내 요구 사항은 int 상단 =1, 스택 [MAX]; 두 개의 전역 변수가 주 함수(로컬 변수) 내부에 배치됩니다. 해당 요구 사항에 대한 코드를 작성하십시오. void main() { int 스택 [MAX], 항목; int ch; clrscr (); 상단 = -1; 이제 스택을 구현하는 방법에 한 가지 더 선택 사항을 추가하겠습니다. 컴파일 타임이 아닌 런타임에 스택의 최대 크기를 결정할 수 있기를 원합니다.

함수 이름 의 시작 부분에 데이터 구조 이름을 배치하는 규칙을 사용합니다(예: StackIsEmpty). 그것은 우리가 선을 내리는 데 도움이 될 것입니다. 예를 들어 프로그램에서 IsEmpty 연산을 사용하는 경우 2개의 서로 다른 IsEmpty 함수가 충돌하지 않도록 합니다. 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입니다.