第五周 项目1

来源:互联网 发布:阿里云ecs快照服务 编辑:程序博客网 时间:2024/05/22 17:02

顺序栈算法库采用程序的多文件组织形式,包括两个文件:
  
  1.头文件:sqstack.h,包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;

#ifndef SQSTACK_H_INCLUDED 
#define SQSTACK_H_INCLUDED 
 
#define MaxSize 100 
typedef char ElemType; 
typedef struct 

    ElemType data[MaxSize]; 
    int top;                //栈指针 
} SqStack;                  //顺序栈类型定义 
 
void InitStack(SqStack *&s);    //初始化栈 
void DestroyStack(SqStack *&s);  //销毁栈 
bool StackEmpty(SqStack *s);     //栈是否为空 
int StackLength(SqStack *s);  //返回栈中元素个数——栈长度 
bool Push(SqStack *&s,ElemType e); //入栈 
bool Pop(SqStack *&s,ElemType &e); //出栈 
bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素 
void DispStack(SqStack *s);  //输出栈 
 
#endif // SQSTACK_H_INCLUDED 

2.源文件:sqstack.cpp,包含实现各种算法的函数的定义
[cpp] view plain copy
<span style="font-family:SimSun;font-size:12px;">#include <stdio.h> 
#include <malloc.h> 
#include "sqstack.h" 
 
void InitStack(SqStack *&s) 

    s=(SqStack *)malloc(sizeof(SqStack)); 
    s->top=-1; 

void DestroyStack(SqStack *&s) 

    free(s); 

int StackLength(SqStack *s)  //返回栈中元素个数——栈长度 

    return(s->top+1); 

bool StackEmpty(SqStack *s) 

    return(s->top==-1); 

bool Push(SqStack *&s,ElemType e) 

    if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出 
        return false; 
    s->top++; 
    s->data[s->top]=e; 
    return true; 

bool Pop(SqStack *&s,ElemType &e) 

    if (s->top==-1)     //栈为空的情况,即栈下溢出 
        return false; 
    e=s->data[s->top]; 
    s->top--; 
    return true; 

bool GetTop(SqStack *s,ElemType &e) 

    if (s->top==-1)         //栈为空的情况,即栈下溢出 
        return false; 
    e=s->data[s->top]; 
    return true; 

 
void DispStack(SqStack *s)  //输出栈 

    int i; 
    for (i=s->top;i>=0;i--) 
        printf("%c ",s->data[i]); 
    printf("\n"); 
}</span> 

3.在同一项目(project)中建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 例:
[cpp] view plain copy
<p><span style="font-size:12px;"></span></p> 
[cpp] view plain copy
#include <stdio.h> 
#include "sqstack.h" 
 
int main() 

    ElemType e; 
    SqStack *s; 
    printf("(1)初始化栈s\n"); 
    InitStack(s); 
    printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空")); 
    printf("(3)依次进栈元素a,b,c,d,e\n"); 
    Push(s,'a'); 
    Push(s,'b'); 
    Push(s,'c'); 
    Push(s,'d'); 
    Push(s,'e'); 
    printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空")); 
    printf("(5)栈长度:%d\n",StackLength(s)); 
    printf("(6)从栈顶到栈底元素:");DispStack(s); 
    printf("(7)出栈序列:"); 
    while (!StackEmpty(s)) 
    { 
        Pop(s,e); 
        printf("%c ",e); 
    } 
    printf("\n"); 
    printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空")); 
    printf("(9)释放栈\n"); 
    DestroyStack(s); 
    return 0; 

 

原创粉丝点击