C++版栈的基本操作和应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<"\n现在栈中有两个元素.\n";
PrintElem(Sa);
int n;
cout<<"请输入还要入栈的元素个数:";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"\n请输入第"<<i+2<<"个元素:";
cin>>e;
Push(Sa,e);
}
//cout<<"现在栈中元素有:"<<StackLength(Sa)<<"个。"<<endl;
*e=(*S)->data[(*S)->top--];
//取出栈顶当前指向元素,栈顶指针减1
return 1;
}
//逆序打印栈中元素
void PrintElem(pSeqStack S)
{
int j=S->top ;
if(S->top==-1) cout<<"该栈为空栈.";
else
while(j!=-1)
cout<<"现在栈中元素有:"<<Sa->top +1<<"个。"<<endl;
cout<<"\n现在出栈,栈顶元素为:\n";
Pop(&Sa,&e);
cout<<e<<endl;
cout<<"栈中剩余元素有:\n";
PrintElem(Sa);
cout<<"现在栈中元素个数为:"<<StackLength(Sa);
#include<iostream.h>
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define MAXSIZE 100
typedef int DataType;
struct STACK
{
DataType data[MAXSIZE];
int top;
cout<<endl;
cout<<"下面进制转换"<<endl;
conversion();
}
{
cout<<S->data[j--]<<ends;
}
cout<<endl;
}
//进制转换函数
void conversion()
{
pSeqStack S;
DataType e;
char b[17]="0123456789ABCDEF";
int n,r;
S=InitStack();
cout<<"输入要转换的数值:\n";
//初始化
pSeqStack InitStack()
{
pSeqStack S;
S=(pSeqStack)malloc(sizeof(SeqStack));
if(S) S->top=-1;
return S;
}
//销毁栈
void DestroyStack(pSeqStack &S)
{
if (S)
free(S);
Sa=InitStack();
cout<<"现在栈为空.\n";
cout<<"请输入第一个要入栈的元素值:";
cin>>e;
Push(Sa,e);
cout<<"\n现在栈中有一个元素.\n";
PrintElem(Sa);
cout<<"请输入第二个要入栈的元素值:";
cin>>e;
Push(Sa,e);
{
return S->top+1;
}
//获取栈顶元素值
int GetTop(pSeqStack S,DataType *e)
{
if (S->top==-1) return 0;
*e=S->data[S->top]; //栈本身不改变
return 1;
}
//入栈
int Push(pSeqStack &S,DataType e)
S=NULL;
}
//清空栈
void ClearStack(pSeqStack &S)
{
S->top=-1;
}
//判栈空
int StackEmpty(pSeqStack S)
{
if (S->top==-1)
return 1;
else
return 0;
}
//求栈中元素个数
int StackLength(pSeqStack S)
Pop(&S,&e);
cout<<b[e];
}
cout<<endl;
}
void main()
{
DataType e;
pSeqStack Sa;
cout<<"\n\n-------------------SqStack Demo is running...----------------\n\n";
cout<<"First is Push function.\n";
{
if (S->top>=MAXSIZE-1)
return 0; //栈满,不能入栈
else{
S->top++;
S->data[S->top]=e;
return 1;
}
}
//出栈
int Pop(pSeqStack *S,DataType *e)
{
if ((*S)->top==-1) return 0;//栈空
int StackEmpty(pSeqStack S);
int StackLength(pSeqStack S);
int GetTop(pSeqStack S,DataType *e);
int Push(pSeqStack *S,DataType e);
int Pop(pSeqStack *S,DataType *e);
};
typedef struct STACK SeqStack;
typedef struct STACK *pSeqStack;
//函数声明
pSeqStack InitStack();
void DestroyStack(pSeqStack &S);
void ClearStack(pSeqStack &S);
Leabharlann Baiducin>>n;
cout<<"请输入要转换的进制:";
cin>>r;
if(n<0)
{
cout<<"\nThe number must be over 0.";
return;
}
if(!n) Push(S,0);
while(n){
Push(S,n%r);
n=n/r;
}
cout<<"结果为: ";
while(!StackEmpty(S)){
PrintElem(Sa);
int n;
cout<<"请输入还要入栈的元素个数:";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"\n请输入第"<<i+2<<"个元素:";
cin>>e;
Push(Sa,e);
}
//cout<<"现在栈中元素有:"<<StackLength(Sa)<<"个。"<<endl;
*e=(*S)->data[(*S)->top--];
//取出栈顶当前指向元素,栈顶指针减1
return 1;
}
//逆序打印栈中元素
void PrintElem(pSeqStack S)
{
int j=S->top ;
if(S->top==-1) cout<<"该栈为空栈.";
else
while(j!=-1)
cout<<"现在栈中元素有:"<<Sa->top +1<<"个。"<<endl;
cout<<"\n现在出栈,栈顶元素为:\n";
Pop(&Sa,&e);
cout<<e<<endl;
cout<<"栈中剩余元素有:\n";
PrintElem(Sa);
cout<<"现在栈中元素个数为:"<<StackLength(Sa);
#include<iostream.h>
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define MAXSIZE 100
typedef int DataType;
struct STACK
{
DataType data[MAXSIZE];
int top;
cout<<endl;
cout<<"下面进制转换"<<endl;
conversion();
}
{
cout<<S->data[j--]<<ends;
}
cout<<endl;
}
//进制转换函数
void conversion()
{
pSeqStack S;
DataType e;
char b[17]="0123456789ABCDEF";
int n,r;
S=InitStack();
cout<<"输入要转换的数值:\n";
//初始化
pSeqStack InitStack()
{
pSeqStack S;
S=(pSeqStack)malloc(sizeof(SeqStack));
if(S) S->top=-1;
return S;
}
//销毁栈
void DestroyStack(pSeqStack &S)
{
if (S)
free(S);
Sa=InitStack();
cout<<"现在栈为空.\n";
cout<<"请输入第一个要入栈的元素值:";
cin>>e;
Push(Sa,e);
cout<<"\n现在栈中有一个元素.\n";
PrintElem(Sa);
cout<<"请输入第二个要入栈的元素值:";
cin>>e;
Push(Sa,e);
{
return S->top+1;
}
//获取栈顶元素值
int GetTop(pSeqStack S,DataType *e)
{
if (S->top==-1) return 0;
*e=S->data[S->top]; //栈本身不改变
return 1;
}
//入栈
int Push(pSeqStack &S,DataType e)
S=NULL;
}
//清空栈
void ClearStack(pSeqStack &S)
{
S->top=-1;
}
//判栈空
int StackEmpty(pSeqStack S)
{
if (S->top==-1)
return 1;
else
return 0;
}
//求栈中元素个数
int StackLength(pSeqStack S)
Pop(&S,&e);
cout<<b[e];
}
cout<<endl;
}
void main()
{
DataType e;
pSeqStack Sa;
cout<<"\n\n-------------------SqStack Demo is running...----------------\n\n";
cout<<"First is Push function.\n";
{
if (S->top>=MAXSIZE-1)
return 0; //栈满,不能入栈
else{
S->top++;
S->data[S->top]=e;
return 1;
}
}
//出栈
int Pop(pSeqStack *S,DataType *e)
{
if ((*S)->top==-1) return 0;//栈空
int StackEmpty(pSeqStack S);
int StackLength(pSeqStack S);
int GetTop(pSeqStack S,DataType *e);
int Push(pSeqStack *S,DataType e);
int Pop(pSeqStack *S,DataType *e);
};
typedef struct STACK SeqStack;
typedef struct STACK *pSeqStack;
//函数声明
pSeqStack InitStack();
void DestroyStack(pSeqStack &S);
void ClearStack(pSeqStack &S);
Leabharlann Baiducin>>n;
cout<<"请输入要转换的进制:";
cin>>r;
if(n<0)
{
cout<<"\nThe number must be over 0.";
return;
}
if(!n) Push(S,0);
while(n){
Push(S,n%r);
n=n/r;
}
cout<<"结果为: ";
while(!StackEmpty(S)){