I'm a rookie in data structures .今天上机实习了一下回文串着一章向大家汇报。(drmao

drmao 2003-10-29 10:39:58
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define Status int
#define StackElemType char
#define QueueElemType char
#define STACKINITSIZE 100
#define STACKINCREMENT 10
#define QUEUEINITSIZE 100
#define QUEUEINCREMENT 10
typedef struct Stack{
StackElemType *base;
StackElemType *top;
int stacksize;
}SqStack;
////////////////////////////////////////////////////
typedef struct QNode{
QueueElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct LinkQueue{
QueuePtr front;
QueuePtr rear;
}LinkQueue;///////////////////////////////////////////////////////////////////////////////////////
Status InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
Q.rear->next=0;
return 1;
}/////////////////////////////////////////////
Status DestroyQueue(LinkQueue &Q){
while(Q.front){ Q.rear=Q.front->next; free(Q.front);Q.front=Q.rear; }
return 1;
}/////////////////////////////////////////////////////
Status EnQueue(LinkQueue &Q,QueueElemType e){QueuePtr s=(QueuePtr)malloc(sizeof(QNode));
s->data=e; s->next=0; Q.rear->next=s; Q.rear=s;
return 1;
}//////////////////////////////////////////////////////////
Status DeQueue(LinkQueue &Q,QueueElemType &e){QueuePtr p=0;
if(Q.front==Q.rear){printf("\nQUEUE EMPTY!");return 0;}
p=Q.front->next; e=p->data; Q.front->next=p->next;
if(p==Q.rear)Q.rear=Q.front;
free(p);
return 1;
}////////////////////////////////////////////////////
Status QueueEmpty(LinkQueue &Q){return Q.front==Q.rear;
}///////////////////////////////////////////////////

Status InitSqStack(SqStack &S){
S.top=S.base=(StackElemType*)malloc(STACKINITSIZE*sizeof(StackElemType));
S.stacksize=STACKINITSIZE;
return 1;
}//////////////////////////////////////////////
Status Push(SqStack &S,StackElemType e){
if((S.top-S.base)>=S.stacksize-1){
S.base=(StackElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(StackElemType));
S.stacksize+=STACKINCREMENT;
}
*(S.top++)=e;
return 1;
}////////////////////////////////////
Status GetTop(SqStack &S,StackElemType &e){
if(S.top==S.base)return 0;
e=*(S.top-1);
return 1;
}/////////////////////////////////////////////////////
Status Pop(SqStack &S,StackElemType &e){
if(S.top==S.base){return 0;}
e=*(--S.top);
return 1;
}///////////////////////////////////////
Status StackEmpty(SqStack &S){ return S.base==S.top;
}/////////////////////////////////////////////////////
Status Test(char T){int gap='a'-'A'; char t;
SqStack S; LinkQueue Q; InitSqStack(S); InitQueue(Q);
if(T>'Z'||T<'A'){
loop: printf("\nT要大写的英文字母请再次输入,按#退出");
scanf("%c",&T);
if(T=='#')return 0;
if(T>'Z'||T<'A') goto loop;
}
while(T>='A'){Push(S,T),EnQueue(Q,T);T--;}
Pop(S,t);
while(!QueueEmpty(Q)){ DeQueue(Q,t);
if((t-'A')%2==1)printf("%3c",t+gap);
else printf("%3c",t);
}
while(!StackEmpty(S)){ Pop(S,t);
if((t-'A')%2==1)printf("%3c",t+gap);
else printf("%3c",t);
}
return 1;
}
/////////////////////////////////
int main(){ char t;scanf("%c",&t);
Test(t);
return 1;
}////////////////////////////////////////
...全文
166 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CD2006 2003-10-29
  • 打赏
  • 举报
回复
Iam very sorry that have made a mistake.


char str[100];
cin>>str;
while(str[0]>'Z'||str[0]<'A'){
printf("\nT要大写的英文字母请再次输入,按#退出:\n");
cin>>str;
if(str[0]=='#')return 0;
}


CD2006 2003-10-29
  • 打赏
  • 举报
回复
有意思,That's a small problem. I only refered it.


char str[100];
cin>>str;
while(str[0]>'Z'||str[0]<'A'){
printf("\nT要大写的英文字母请再次输入,按#退出:\n");
if(str[0]=='#')return 0;
}

如果你要钻我的空子,例:在输入时有空格:“sdf dfd ",我还可改:
用vc++ 中的string类定义函数, 然后调用getline函数,就可读入空格,

不过,这样有点小题大做,你是为Data Structure而做题的

Good luck to you!





drmao 2003-10-29
  • 打赏
  • 举报
回复
: ZhangYv(新手上路
还好。不是很晕人吧??
drmao 2003-10-29
  • 打赏
  • 举报
回复
CD2006(小英雄)没有办法了,我改成
///////////////////////////////////////////////////////
while(T>'Z'||T<'A'){
printf("\nT要大写的英文字母请再次输入,按#退出:\n");
T=getchar();
if(T=='#')return 0;
}
///////////////////////////////////////////////////////
结果还是一样,请问你有什么高见么??
ZhangYv 2003-10-29
  • 打赏
  • 举报
回复
但是////////////////////////////////////////////////////的格式让人看了非常不爽,有头晕的感觉,没必要加.
ZhangYv 2003-10-29
  • 打赏
  • 举报
回复
但是////////////////////////////////////////////////////的格式让人看了非常不爽,有头晕的感觉,没必要加.
ZhangYv 2003-10-29
  • 打赏
  • 举报
回复
但是////////////////////////////////////////////////////的格式让人看了非常不爽,有头晕的感觉,没必要加.
CD2006 2003-10-29
  • 打赏
  • 举报
回复
我刚才测试了一下,若输入:“sfdfgf” 一串字符,则弹出7个“T要大写的英文字母请再次输入,按#退出”的提示,不爽,我显然知道是哪里写的不好,我相信你也知道。

你的入队,出队操作还是很规范的。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧