您的位置:首页 > 编程语言 > C语言/C++

c语言:顺序栈的应用(二) 判断回文数

2016-03-30 13:28 701 查看
#include<iostream>

#include<stdio.h>

#define STACK_INIT_SIZE 100

#define STACK_INCREMENT 10

using namespace std;

typedef struct Stack //结构体定义

{

int *elem; //数据域

int top; //顺序栈栈顶

int stacksize; //顺序栈当前长度

}Stack;

//函数声明部分

void Error(char *s); //错误处理函数

void Init_Stack(Stack &l); //初始化顺序栈

void Destroy_Stack(Stack & l); //销毁顺序栈

void Push_Stack(Stack &L, int e); //压栈操作函数

int Pop_Stack(Stack &L, int e); //出栈操作函数

void Increment_Stack(Stack & l); //增加顺序栈空间函数

void Judge_Stack(Stack &l); //判断是否为回文数

//函数实现部分

void Error(char *s)

{

cout << s << endl;

exit(1);

}

void Init_Stack(Stack &l)

{

l.elem = new int[STACK_INIT_SIZE];

if (!l.elem)

Error("内存申请失败!");

l.top = -1;

l.stacksize = STACK_INIT_SIZE;

}

void Destroy_Stack(Stack &l)

{

delete[] l.elem;

l.top = -1;

l.stacksize = 0;

cout << "该顺序栈销毁成功!" << endl;

}

void Increment_Stack(Stack &l)

{

int *newstack = new int[l.stacksize + STACK_INCREMENT];

if (!newstack)

Error("存储分配失败!");

for (int i = 0; i < l.top; i++)

{

newstack[i] = l.elem[i];

}

l.elem = newstack;

delete[] l.elem;

l.stacksize += STACK_INCREMENT;

}

void Push_Stack(Stack &l, int e)

{

if (l.top == (l.stacksize - 1))

Increment_Stack(l);

l.elem[++l.top] = e;

}

int Pop_Stack(Stack &l, int e)

{

if (l.top == -1)

Error("该顺序栈为空栈!");

return e = l.elem[l.top--];

}

void Judge_Stack(Stack *s) //判断是否是回文数函数

{

Init_Stack(*s); //初始化顺序栈

char t[250]; //申请内存

cout << "请输入要判断的数:" << endl;

cin >> t;

int i, len;

int e = 0;

char temp;

len = strlen(t); //计算回文数长度

for (i = 0; i <len / 2; i++) //将回文数的一半压栈

{

Push_Stack(*s, t[i]);

}

if (len % 2 == 1) //判断字符长度是奇数还是偶数,奇数加一

i++;

while (s->top>-1)

{

temp = Pop_Stack(*s, e); //将压入栈的元素出栈,赋给temp

if (temp != t[i]) //比较两个字符的大小

{

cout << "该数不是回文数!"<<endl; //第一个不相等就直接跳出,没必要比较后面的部分

exit(1);

}

else //否则继续比较大小,直到结束

i++;

}

cout << "该数是回文数!" << endl;

}

int main()

{

Stack s;

Judge_Stack(&s);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: