栈–先入后出(队列,先入先出)
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;
}
结果