Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111523
  • 博文数量: 106
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 1165
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-06 12:51
文章分类

全部博文(106)

文章存档

2012年(106)

我的朋友

分类: C/C++

2012-05-07 17:26:27

栈的实现

一、目的:

掌握栈的表示,实现及其针对栈的各种操作。

二、要求:

建立一个顺序栈,实现栈常用的基本操作。栈的应用基本上基于这些方法实现的。

完成用以实现10进制数转换成任意进制(2~9)的数据。

三、实验内容

1、设计程序。

2、调试程序,并设计输入数据。

四、实验报告要求

写出程序和实验结果。

#include "iostream.h"
//这里还要加入我们默认的常量头文件
//#include "head.h"

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define OVERFLOW 0
#define ERROR 0
#define CANCEL 0
typedef int SElemType;

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

int InitStack(SqStack &S)
{
S.base=new SElemType[STACK_INIT_SIZE];
if(!S.base) return OVERFLOW;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}

int DestroyStack(SqStack &S)
{
S.top=NULL;
S.base=NULL;
delete[] S.base;
S.stacksize=0;
return OK;
}

int StackEmpty(SqStack s)
{
if(s.top==s.base) return 1;
else return 0;
}

int GetTop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*(s.top-1);
return OK;
}

int StackLength(SqStack s)
{
return s.top-s.base;
}

int ClearStack(SqStack &S)
{
S.top=S.base;
return OK;
}

int Push(SqStack &s,SElemType e)
{
if(s.top-s.base>=s.stacksize)
return OVERFLOW;
*s.top++=e;
return OK;
}

int Pop(SqStack &s,SElemType &e)
{
if(s.top==s.base) return ERROR;
e=*--s.top;
return OK;
}

int StackTraverse(SqStack s,int(*visit)(SElemType c))//这个函数最好不要用,因为它已经破坏了栈的特性
{
while(s.top>s.base)
visit(*s.base++);
cout<return OK;
}
int visit(SElemType c)
{
cout<return OK;
}
void main() //为进制转换的函数
{
SqStack S;
SElemType N;
int M;
SElemType e;
InitStack(S);
cout<<"input the number:";
cin>>N;
cout<<"输入要转换的数制:";
cin>>M;
while(N)
{
Push(S,N%M);
N=N/M; //转换为M进制的数
}
while(!StackEmpty(S))
{
Pop(S,e);
cout<}
cout<}

阅读(447) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~