13-12-2007, 09:21
|
|
|
|
חבר מתאריך: 10.06.06
הודעות: 452
|
|
בעיה במחסנית בדיקת פולינדרום
שלום לכולם יש לי בעיה קטנה בתוכנית. רשמתי מחסנית שאמורה לבדוק האם המחרוזת היא פולינדרום. האלגוריתם נורא פשוט הוא לקחת את כל המחרוזת להכניס אותה למחסנית ואז להתחיל להוציא כאשר משווים את הערכים שמוציאים עם המחרוזת. ככה שאם היא פולינדרום אמורים להיות זהים. כי הסוף אמור להיות שווה להתחלה. הבעיה היא שבהרצאה הוא רושם לי טעות . מקווה שתעזרו לי.
קוד:
#include <iostream>
using namespace std;
#define stack_max 20
typedef char data_type;
class Stack{
public:
int top;
data_type arr[stack_max];
Stack(){top=-1;};
Stack(Stack * s){s->top=-1;};
int is_empty(Stack *s){if (s->top==-1) return 1; return 0;};
int is_full(Stack *s){if (s->top==stack_max-1) return 1; return 0;};
data_type pop(Stack *s);
void push(Stack *s,data_type x);
bool polendrom(char *);
};
data_type Stack::pop(Stack *s)
{
if (is_empty(s)){
puts("stack underflow");
exit(1);
}
else return s->arr[s->top--];
}
void Stack::push(Stack *s,data_type x)
{if (is_full(s)){
puts("stack overflow");
exit(1);
}
else
{s->top++;
s->arr[s->top]=x;
}
}
bool Stack::polendrom(char * t){
Stack *s;
data_type x;
for(int i=0;t[i]!='\0';i++)
push(s,t[i]);
for(int i=0;t[i]!='\0';i++)
{ x=pop(s);
if (x!=t[i]) return false;
}
return true;
}
int main()
{
Stack * s;
char *t;
cin>>t;
if (s->polendrom(t)) cout<<"polendrom"; else cout<<"not polendrom";
}
_____________________________________
לגלריה
|