C语言 数据结构 队列和栈问题

想设计一个程序可以判断给定的一个文字是否是回文。比如abcba就是回文,利用栈和队列的特性判断。栈的主要数据结构定义如下:typedefstruct{ElemType*b... 想设计一个程序可以判断给定的一个文字是否是回文。比如abcba就是回文,利用栈和队列的特性判断。
栈的主要数据结构定义如下:
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}sqstack;
队列的主要数据结构定义如下:
typedef struct QNode{
char data;
struct QNode *next;
}QNode,*Queueptr;
typedef struct{
Queueptr front;
Queueptr rear;
}linkQueue;
程序的主框架如下:
scanf("%c",&c);
while(c!='#') {push(&s,c); EnQueue(&Q,c); scanf("%c",&c); }
while(!(s.top==s.base))
{ pop(&s,&a); DeQueue(&Q,&b);
if(a!=b) {printf("This isn't acycle\n");exit(0); }
}
printf("This is acycle\n"); return OK;
展开
 我来答
百度网友439f3ac63
2013-08-26 · TA获得超过252个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:67.1万
展开全部
给你看下栈的头文件
你自己添加判断是否是回文的方法吧

#ifndef STACK_H
#define STACK_H

#include <iostream>
using std::ostream;

//template <class Type>
//class Stack;

//template <class Type>
//ostream & operator<< (ostream &, const Stack<Type> &);

template <class Type>
class Stack {
friend ostream & operator<< (ostream &, const Stack<Type> &);
public:
static const int DefaultSize;
Stack(int = DefaultSize); //创建一个最大容量为MaxStackSize的空栈
Stack(Type[], int, int = DefaultSize); //用数组初始化栈
~Stack(){ delete [] stack; }
bool IsFull(); //若元素个数等于栈的最大容量则返回TRUE,否则返回FALSE
void Add(const Type &); //若IsFull()为TRUE,则调用StackFull,否则将item插入栈顶
bool IsEmpty(); //若栈中元素个数等于0则返回TRUE,否则返回FALSE
Type * Delete(Type&); //若IsEmpty()为TRUE,则调用StackEmpty并返回0,
//否则删除栈顶元素并返回其指针
void StackFull(); //将栈的最大容量扩大一倍
void StackEmpty(); //输出警告:栈已空, 不能弹出变量
void Empty(); //将栈清空
int GetSize(); //获得栈内元素数目
private:
Type * stack;
int MaxSize;
int top;
};

template <class Type>
const int Stack<Type>::DefaultSize = 10;

template <class Type>
Stack<Type>::Stack(int pMaxSize) {
MaxSize = pMaxSize;
stack = new Type[MaxSize];
top = -1;
}

template <class Type>
Stack<Type>::Stack(Type pArray[], int pLen, int pMaxSize) {
stack = new Type[pMaxSize];
for ( int i = 0; i < pLen; i++ )
{
stack[i] = pArray[i];
}
top = pLen - 1;
MaxSize = pMaxSize;
}

template <class Type>
inline bool Stack<Type>::IsFull() {
if (top == MaxSize - 1) return true;
else return false;
}

template <class Type>
inline bool Stack<Type>::IsEmpty() {
if (top == -1) return true;
else return false;
}

template <class Type>
void Stack<Type>::Add(const Type & pX) {
if (IsFull())
{
StackFull();
stack[++top] = pX;
}
else stack[++top] = pX;
}

template <class Type>
Type * Stack<Type>::Delete(Type & pX) {
if (IsEmpty())
{
StackEmpty();
return 0;
}
pX = stack[top--];
return &pX;
}

template <class Type>
void Stack<Type>::StackEmpty() {
cout << "栈已空,不能进行弹出操作!" << endl;
}

template <class Type>
void Stack<Type>::StackFull() {
Type * nStack = new Type[MaxSize * 2];
for ( int i = 0; i <= top; i++ )
{
nStack[i] = stack[i];
}
MaxSize = MaxSize * 2;
delete [] stack;
stack = nStack;
cout << "栈已满,栈的自动容量自动扩充为原来的两倍 (" << MaxSize << ")" << endl;
}

template <class Type>
ostream & operator << (ostream & pOutput, const Stack<Type> & pS) {
if (pS.top == -1)
{
pOutput << "空栈" << endl;
return pOutput;
}
for ( int i = 0; i <= pS.top; i++ )
{
pOutput << pS.stack[i] << " ";
}
return pOutput;
}

template <class Type>
void Stack<Type>::Empty() {
top = -1;
}

template <class Type>
int Stack<Type>::GetSize() {
return top + 1;
}

#endif
treeglass123
2013-08-25 · TA获得超过228个赞
知道答主
回答量:25
采纳率:0%
帮助的人:10.4万
展开全部
你的程序中,少的东西太多。如栈、队初始化,入栈、入队,出栈、出队等,这些的原函数都没写,而你想在主函数直接调用是不可能的。你应该先实现这些基本函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guozekun6
2013-08-25
知道答主
回答量:26
采纳率:0%
帮助的人:13.1万
展开全部
好像很多变量和函数的定义不完整吧,应该是片段吧,感觉很简单的,我需要回答什么呀?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式