C语言实现数据结构----栈

在这里插入图片描述
栈–先入后出(队列,先入先出)

1,Push()入栈(添加数据)
2,Pop()出栈(删除数据,返回被删除的数据)
3,Peek()取得栈顶的数据,不删除
4,Clear()清空所有数据

栈实现进制转换

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream>
using namespace std;

#define OK 0
#define OVERFLOW 1
#define ERROR -1

#define TURE 1
#define FALSE 0

#define STACK_INIT_SIZE 100     //存储空间初始分配量 
#define STACKINCREMENT 10       //存储空间分配增量 

typedef int SElemType;
typedef int Status;

typedef struct
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

Status InitStack(SqStack &S)
//构造空栈S 
{
	S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S.base) exit(OVERFLOW);
	S.top=S.base;
	S.stacksize=STACK_INIT_SIZE;
	return OK;
}

Status Push(SqStack &S,SElemType e)
//插入元素e为新的栈顶元素
{
	if(S.top-S.base>=S.stacksize)
	{
		S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
		if(!S.base)exit(OVERFLOW);
		S.top=S.base+S.stacksize;
		S.stacksize+=STACKINCREMENT;
	}
	*S.top++=e;
	return OK;
} 

Status Pop(SqStack &S,int &e)
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK否则返回ERROR
{
	if(S.top==S.base)return ERROR;
	e=*--S.top;
	return OK;
} 

Status StackEmpty(SqStack &S)
{
	if(S.base>=S.top)
	return TURE;
	else
	return FALSE;
}

void conversion(SqStack &S,int n)
{
	int i,e;
	InitStack(S);
	cin>>n;
	cout<<"请输入要转换成几进制:"<<endl; 
	cin>>i;
	while(n)
	{
		Push(S,n%i);
		n=n/i;
	}
	while(!StackEmpty(S))
	{
		Pop(S,e);
		
		if(e>9)
		{
			e=e+55;
			cout<<(char)e;
		}
		else
		cout<<e;
	}
}

int main()
{
	int n;
	SqStack S;
	while(1)
	{
		cout<<"请输入十进制数(正数):"<<endl;
		conversion(S,n);
		cout<<endl;
		free(S.base);
	}
	return 0;
}

结果

在这里插入图片描述

发布了43 篇原创文章 · 获赞 6 · 访问量 1534

猜你喜欢

转载自blog.csdn.net/weixin_43729631/article/details/102963582