栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

顺序栈示例(c)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

顺序栈示例(c)

#include 
#include 
#include 

// 栈 尽在表尾端(栈顶)进行插入和删除
// 后进先出 
// 顺序栈

#define  MAXSIZE 10       //数组最大容量
//顺序栈就是功能不完整的数组,栈顶相当于数组的最后一个
typedef struct STACK
{
	int stacksize;         //栈最大可用容量
	int count;             //记录当前栈的元素个数
	int *top;              //栈顶指针

}Sqstack, *Stack;

Stack Init_stack()
{
	Stack s = malloc(sizeof(Stack));
	if (s != NULL)
	{
		s -> top = calloc(MAXSIZE,sizeof(int));
		s -> stacksize  = MAXSIZE;
		s -> count   = -1;

		return s;
	}
}


bool Empty_stack(Stack S)              //判空
{
	return S -> count == -1;   //成立 true  否则  false
}

bool Full_stack(Stack S)               //是否已满
{
	return S -> count == S -> stacksize -1;
}

bool Push_stack(Stack S, int DATA)     //入栈
{
	if(Full_stack(S))    
	{ 
		return false;           //栈已满
	}

	S -> count++;      //存储的数量+1
	S -> top[S -> count] = DATA;

	return true;
}

bool Pop_stack(Stack S, int *elem)     //出栈,并用elem返回删除的值
{
	if(Empty_stack(S))
	{
		return false;           //栈空
	}

	*elem = S -> top[S -> count];
	S -> count--;

	return true;
}

void Print_stack(Stack S)              //打印栈
{
	if(Empty_stack(S))
	{
		printf("栈空!");
	}
	int temp = S -> count;
	for( temp; temp != -1; temp--)
	{
		printf("%2d", S -> top[temp]);
	}
	printf("n");
}

int main()
{
	Stack s = Init_stack();
	
	int n;
	printf("请输入需要转换的10进制数据:t");
	scanf("%d",&n);

	while(n > 0)
	{
		if(Push_stack(s, n % 2) == false)
		{
			printf("入栈失败!n");
			return -1;
		}

		n /= 2;
	}

	printf("转换为2进制的数据为:      t");
	int m;
	while(!Empty_stack(s))
	{
		if (Pop_stack(s, &m) == false)
		{
			break;
		}
		printf("%d", m);
	}
	printf("n");
	Print_stack(s);
	for( n = 1; n < 5; n++)
	{
		Push_stack(s,n);
	}
	Print_stack(s);
	return 0;
}

结果图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号