头歌 顺序栈的基本操作及应用

第1关 顺序栈的基本操作

#include 
#include
#include 
using namespace std;

 // 函数结果状态代码
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define OVERFLOW -1
 
#define  STACK_INIT_SIZE   100  //存储空间初始分配量 
#define  STACKINCREMENT    10   //存储空间分配增量  
typedef int SElemType; // 定义栈元素类型为整型
/* 顺序栈类型定义 */
typedef   struct
{          
    SElemType     *base;    //栈的基址即栈底指针          
    SElemType     *top;     //栈顶指针          
   int      stacksize;       //当前分配的空间 
}SqStack; 

void input(SElemType &s);
void output(SElemType s);

void InitStack(SqStack &S);// 构造一个空栈S
void DestroyStack(SqStack &S); // 销毁栈S,S不再存在
void ClearStack(SqStack &S); // 把S置为空栈
int StackEmpty(SqStack S); // 若栈S为空栈,则返回TRUE,否则返回FALSE
int StackLength(SqStack S); // 返回S的元素个数,即栈的长度
int GetTop(SqStack S,SElemType &e);  // 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
void Push(SqStack &S,SElemType e);    // 插入元素e为新的栈顶元素
int Pop(SqStack &S,SElemType &e);   // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
void StackTraverse(SqStack S,void(*visit)(SElemType)); // 从栈底到栈顶依次对栈中每个元素调用函数visit()


int main()
 {
   int j;
   SqStack s;
   SElemType e;
   InitStack(s);
   int i;
   cin>>i;
   for(j=0;j>s;
}
void output(SElemType s)
{
    cout<= S.stacksize) return ;
    *S.top = e;
    S.top++;
    /********** End **********/	
}

int Pop(SqStack &S,SElemType &e)
{   
	// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    /********** Begin **********/ 
    if(S.base == S.top) return ERROR;
    S.top--;
    e =  *S.top;
    return e;
    /********** End **********/ 	
}

void StackTraverse(SqStack S,void(*visit)(SElemType))
{ 
	// 从栈底到栈顶依次对栈中每个元素调用函数visit()
    /********** Begin **********/ 
    SElemType *p = S.base;
    while(p != S.top){
        visit(*p);
        p++;
    }
    /********** End **********/	
}

 第2关 栈的应用-进制转换

#include 
#include
#include 
using namespace std;

typedef int SElemType; // 定义栈元素类型为整型

#include "sqstack.h"  // 顺序栈的类型定义

void conversion(unsigned n)
{ 
	// 对于输入的任意一个非负10进制整数,打印输出与其等值的16进制数
   /********** Begin **********/ 
    SElemType res;
    SqStack s;

    InitStack(s);

    while (n % 16) {   
        Push(s, n % 16);     // 希望的是 字符可以自动变为asc码
        n /= 16;
    }
    while (s.base != s.top) {
        Pop(s,res);
        switch (res) {
            case 10:
                res = 'A';
                break;
            case 11:
                res = 'B';
                break;
            case 12:
                res = 'C';
                break;
            case 13:
                res = 'D';
                break;
            case 14:
                res = 'E';
                break;
            case 15:
                res = 'F';
                break;
            default:
                res = res;
        }
        res>10?printf("%c",res):printf("%d",res);
    }
    DestroyStack(s);

	/********** End **********/	
}

int main()
{  
    unsigned n; // 非负整数
    scanf("%u",&n); // 输入非负十进制整数n
    conversion(n);
 }

第3关 栈的应用-回文的判断

#include
#include

#include"sqstack.h"    //头文件sqstack.h为顺序栈的定义和基本操作的实现

typedef char SElemType;// 定义栈元素类型为字符型

# define MAXSIZE  80

int main()
{
	/********** Begin **********/ 
	SElemType a[MAXSIZE];
    SElemType b;
    scanf("%s",a);
    getchar();
    printf("%s\n",a);
    SqStack s;
    InitStack(s);
    int i;
    for(i =0;i

你可能感兴趣的:(数据结构,数据结构,算法,c++)