• 大小: 220KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-28
  • 语言: 其他
  • 标签:

资源简介

数据结构课程设计----表达式类型的实现 完美程序+完整的报告

资源截图

代码片段和文件信息

	/*头文件*/
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
///数据类型定义
typedef int Status;
typedef struct BiTNode//树的存储结构
{
int tdata;//放int数据,当有数字时,data[0]=‘&‘,用‘&‘标志结点放的是数字
char data[10];//放字母字符串或是运算符号字符
struct BiTNode *lchild*rchild;
}BiTNode*BiTree;
///栈的数据类型定义
typedef char SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack; 
/////////////栈函数定义
Status IntiStack(SqStack &S) //初始化栈函数
{S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if (!S.base) return ERROR;
S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}

Status DestroyStack(SqStack &S) //销毁函数
{free(S.base);S.top=S.base=NULL;return OK;}

int StackLength(SqStack S) //求栈存储的长度函数
{int i=S.top-S.base;return i;}

Status Push(SqStack &S char e) //把e插入到栈顶函数
{
if (S.top-S.base>=S.stacksize)
{
S.base=(SElemType *)realloc(S.base
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));//当栈满的时候重新分配空间
if (!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
*S.top++=e; return OK;}
*S.top++=e; return OK;
}

char Pop(SqStack &S)//删除栈顶并用e返回 函数
{if(S.top==S.base) return ERROR;
char e=*--S.top;return e;}
char gettop(SqStack &Schar &e)//取栈顶元素的函数
{ if (S.top<0){
return ERROR; 
}      //栈空,返回空值
         else { 
                   e=*(S.top-1);
                   return e; 
               }
        }  // gettop
Status StackEmpty (SqStack &S)
     { if (S.top==S.base)
              return OK;       //栈空,返回OK
         else { 
                   return ERROR;
                 }
        }  // empty

char in[100]in2[100];//假设表达式最多有100个字符,“#”表示输入完毕
SqStack S; //借用该栈来实现阿拉伯数字的输入
int a=0; //定义该全局变量来一个一个地初始化树
int i=0j=0;//定义全局变量
char OP[5]={‘+‘‘-‘‘*‘‘/‘‘^‘};//运算符
///////////////函数定义
Status IntiBiTree(BiTree &T)
{
T=NULL;
return OK;
}
Status DestroyBiTree(BiTree &T)
{ if(T->lchild)
    DestroyBiTree(T->lchild);
  if(T->rchild)
  DestroyBiTree(T->rchild);
free(T);
T=NULL;
return OK;
}
void input() { //输入表达式的函数
char d=‘a‘;
for(int b=0;d!=‘#‘;b++)

scanf(“%c“&d);
in[b]=d;//附给in[100]数组
}
getchar();//接收回车键字符
}
int pow10(int b)///10的b 次方
{int c=1;
for(int q=1;q<=b;q++)c=c*10;
return c;

Status CreateBiTree(BiTree &T)//创建表达式类型的树
{ int y;
while(in[a]!=‘#‘)//以#结束
{
if(in[a]==‘-‘||in[a]==‘+‘||in[a]==‘*‘||in[a]==‘/‘||in[a]==‘^‘)//当字符为运算符时
{
if (!(T=(BiTNode *)malloc(sizeof (BiTNode)))) return ERROR;
T->data[0]=in[a];//字符数组的第一个元素为运算符
T->data[1]=‘@‘;//以‘@‘作为结尾的标志
T->tdata=0;//初始化变量
a++;
CreateBiTree(T->lchild);//运算符需要建立它的左右孩子
CreateBiTree(T->rchild);
return OK; 
}
else
{
if(in[a]==‘0‘||in[a]==‘1‘||in[a]==‘2‘||in[a]==‘3‘||in[a]==‘4‘||
in[a]==‘5‘||in[a]==‘6‘||in[a]==‘7‘||in[a]==‘8‘||in[a]==‘9‘)//当字符是阿拉伯数字时
{
Push(S in[a]);//建一个栈来放阿拉伯数字
if(in[a+1]!=‘0‘&&in[a+1]!=‘1‘&&in[a+1]!=‘2‘&&i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      23017  2008-07-04 14:40  数据结构课程设计\2.cpp

     文件      50176  2008-07-31 17:11  数据结构课程设计\2.ncb

     文件        719  2008-07-31 16:45  数据结构课程设计\2.plg

     文件      41984  2008-07-31 16:45  数据结构课程设计\Debug\vc60.idb

     文件      53248  2008-07-31 16:44  数据结构课程设计\Debug\vc60.pdb

     文件     459776  2008-07-31 16:45  数据结构课程设计\Debug\2.pdb

     文件     237666  2008-07-31 16:45  数据结构课程设计\Debug\2.exe

     文件      48091  2008-07-31 16:44  数据结构课程设计\Debug\2.obj

     文件      55808  2008-07-04 15:23  数据结构课程设计\数据结构课程设计的封面.doc

     文件     223744  2008-07-05 23:44  数据结构课程设计\数据结构课程设计实验报告.doc

     文件       3341  2008-07-31 16:44  数据结构课程设计\2.dsp

     文件      48640  2008-07-31 17:11  数据结构课程设计\2.opt

     文件        510  2008-07-31 17:11  数据结构课程设计\2.dsw

     目录          0  2008-07-04 15:19  数据结构课程设计\Debug

     目录          0  2008-07-04 15:19  数据结构课程设计

----------- ---------  ---------- -----  ----

              1246720                    15


评论

共有 条评论