어떻게 C 언어 시뮬레이션 스택

저작권 : 소스를 표시하시기 바랍니다! https://blog.csdn.net/ZouHuiDong/article/details/90343026

스택은 매우 일반적이고 인기 스토리지 유형, 마지막 아웃입니다. C 언어를 사용하여 스택을 구현하려면 그냥 배열과에있는 int 변수, 매우 간단합니다.

간단한 스택

당신이 필요

  • char 배열 - 스택을 시뮬레이션
  • int입니다 변수 - 위치는 스택의 상단을 저장합니다
char Value[12];//一个大小为12的栈
int Head;//用于保存栈顶的位置

간단한 조작

  • 스택의 상부에서 추가의 값을 달성
  • 스택 상단 값을 추출 (삭제)을 달성하기 위해,

값을 추가하려면, 당신 만 1이 될 수 추가 스택 및 스택의 상단에서 값을 추가해야합니다.

//添加值,假如要添加chNew的值
char chNew;
scanf("%c",&chNew);//得到要添加的值

chValue[Head] = chNew;//添加值
Head ++;//栈顶上移

유사하게, 추출하거나 삭제할 값 만 필요한 스택 아래 값 빼기 (스택 머리 위에 스택 가장 값이 위이기 때문에), 상기 스택 (1)이 감소 될 수있다.

//如果要提取出来就先把栈顶的值存到另外一个变量里(如果提取出来只需要显示一下就不需要再多创建一个变量):
char chGet = chValue[Head-1];
printf("你提取出来的值:%c",chGet);
///////////////////////////////////////////////////////
chValue[Head-1] = 0;//删去值
Head --;//栈顶下移

스택은 상부 또는 하부 한계 여부를 판단 할 수있다 :

//在插入时判断是否达到上限:
if(Head>=12)//因为栈的大小是12,可根据不同需要来更改
{
	printf("栈已满,不可以继续添加!");
	return ;//不再往下执行
}

//在删去时判断是否达到下限:
if(Head==0)
{
	printf("栈已空,不可以继续删除!");
	return ;//不再往下执行
}

더 완벽한 프로그램

보다 완벽한 스택 시뮬레이션 프로그램을 달성하기 위해, 우리는 요약해야합니다

  • 메인 인터페이스의 종류 이상의 스택을 표시하는 경우
  • 사용자는 스택 어떤 조치의 주요 인터페이스에서 대기하기로 결정
  • 추가 및 삭제 기능

코드 :

#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <graphics.h>

struct stack //结构体 栈
{
	char chStack[12];//栈的数组
	int head;//栈的头
};

struct stack Stack;//创建栈

void Print(char chValue[12])//打印界面
{
	system("cls");
	printf("这是栈:");
	int i;
	for (i=11;i>=0;i--)
		printf("\n[%c]",chValue[i]);
	printf("\n\n按i增加数值,按p弹出最上面的数值");
}

void getinput()//获取用户输入
{
	char chGet;
	while (1)
	{
		if (kbhit())//如果发现用户有按下按键
		{
			chGet = getch();//得到用户按下的按键
			char chValue[1];
			if (chGet == 'i')//如果是i,增加值
			{
				if (Stack.head >= 12)//如果达到上限,不能再加
				{
					MessageBox(NULL,"已经是栈顶了!","提示",MB_OK);
					return;
				}
				//询问要增加的值
				InputBox(chValue,2,"请输入要增加的字符","增加数值",NULL,0,0,true);
				Stack.chStack[Stack.head] = chValue[0];//增加值
				Stack.head ++;//栈顶上移
			}
			else if (chGet == 'p')//如果是p,删除值
			{
				if (Stack.head == 0)//如果已经到下限,就不能再减
				{
					MessageBox(NULL,"已经是栈底了!","提示",MB_OK);
					return;
				}
				Stack.chStack[Stack.head-1] = 0;//移除值
				Stack.head --;//栈顶下移
			}
			return;
		}
	}
	
}

int main()
{
	system("title 模拟栈程序");
	//初始化
	int i;
	for (i=0;i<12;i++)
		Stack.chStack[i] = 0;	
	Stack.head = 0;
	
	while (1)
	{
		Print(Stack.chStack);
		getinput();
	}
	
	getch();
	return 0;
}

참고 : <graphics.h> 내장되지 않은 헤더 파일. 이것은 당신이 갈 수, EasyX 라이브러리 헤더 파일입니다 www.easyx.cn 다운로드. 메시지 박스에서 InputBox 코드와 헤더 파일 자체를 사용하는 다른 대체 될 수 있습니다. 당신이 EasyX 라이브러리를 사용한다면, 당신은 그래픽 인터페이스, 더 나은를 사용할 수 있습니다.

실행 샷 :
여기에 그림 삽입 설명여기에 그림 삽입 설명
여기에 그림 삽입 설명

추천

출처blog.csdn.net/ZouHuiDong/article/details/90343026