数据结构-顺序栈

<pre name="code" class="cpp"><pre name="code" class="cpp">#include <stdio.h>
 
#define N 100
typedef struct mystact
{
	int top;//栈顶
	int data[N]; //栈里面存储的数据
}SM;//起个别名


void Init(SM *p);//初始化栈为空

void Push(SM *p, int pushData);//压栈

void Pop(SM *p);//出栈

int isEmpty(SM *p);//判断栈是否为空


int isFull(SM *p);//判断栈是否满了
 
int GetData(SM *p);//获取栈顶的元素


 
 
#include "stack.h"
#include <memory.h>//内存函数 
void Init(SM *p)
{ 
	p->top = -1;//不设置为0 因为0代表数组的第一个元素
	//还要清空内存
	memset(p->data, 0, sizeof(int)*N);
}

int isempty(SM *p) 
{
	if (-1 == p->top)//等于-1就为空
	{
		return 1;
	}
	else//不等就不为空
	{
		return 0;
	} 
}
int isFull(SM *p)
{
	if (N - 1 == p->top)//栈的个数等于数组个数减一
	{
		return 1;//满了
	}
	else
	{
		return 0;//没满
	}

}


void Push(SM *p, int pushData)
{
	//判断栈是否满了
	if (isFull(p))
	{
		printf("栈已满\n");
		return;
	}
	p->top = p->top + 1;//栈顶加一
	p->data[p->top] = pushData; //栈顶元素赋值
}

void Pop(SM *p)//不会
{
	//判断栈是否为空
	if (isempty(p))
	{
		printf("栈为空\n");
		return;
	}
	p->top = p->top - 1; //栈顶减一  吐出一个

}

int GetData(SM *p)
{
	return p->data[p->top]; 
}

void main()
{
	SM s;
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	Init(&s);
	/*for (int i = 0; i < 10; i++)
	{
	Push(&s, a[i]);
	printf("%d\n", GetData(&s));

	}
	printf("\n\n");
	for (int i = 0; i < 10; i++)
	{
	printf("%d\n", GetData(&s));
	Pop(&s); 
	}*/
	//栈实现进制转换
	
	for (int num = 10; num; num = num / 2)
	{
		Push(&s, num % 2);//入栈
		printf("%d", GetData(&s));
	}
	printf("\n\n");
	while(!isempty(&s))//栈不为空就一直出栈
	{
		printf("%d", GetData(&s));//获取栈顶元素
		Pop(&s);//弹出已经打印的栈顶元素
	}
	 
	system("pause");
}


 
 

你可能感兴趣的:(数据结构-顺序栈)