求大神幫忙,??假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”。用c++編寫,跪求完整代碼
1 回答

望遠
TA貢獻1017條經(jīng)驗 獲得超1032個贊
#include<stdio.h> #include<stdlib.h> #define?MAX?50 typedef?char?ElemType; typedef?struct?linknode { ElemType?data; struct?linknode?*next; }LiStack; //初始化鏈棧 LiStack?InitStack(LiStack?*s) { s=(LiStack?*)malloc(sizeof(LiStack)); s->next=NULL; return?*s; } //出棧 ElemType?pop(LiStack?*s,ElemType?*e) { LiStack?*p; if(s->next==NULL) { return?false; } p=s->next; *e=p->data; s->next=p->next; free(p); return?*e; } //入棧 void?push(LiStack?*s,ElemType?e) { LiStack?*p=(LiStack?*)malloc(sizeof(LiStack)); p->data=e; p->next=s->next; s->next=p; } //判斷是否是回文序列 bool?Match(LiStack?*l,char?str[],int?length) { char?c; int?i; bool?flag=true; for(i=0;i<length;i++) { if(str[i]!=pop(l,&c)) { flag=false; break; } } printf("\n"); return?flag; } void?main() { LiStack?l; int?i=0,length; char?str[MAX],c; l=InitStack(&l); printf("請輸入一行字符串以@結(jié)尾:\n"); scanf("%c",&c); while(c!='@') { if(c!='\0'&&c!='\n') { str[i++]=c; push(&l,c); } scanf("%c",&c); } str[i]='\0'; length=i/2; if(Match(&l,str,length)) { printf("是回文序列!!\n"); } else { printf("不是回文序列!!\n"); } }
運行結(jié)果:
剛好實驗報告就是這個,不過是用c語言寫的,哈哈~~
- 1 回答
- 0 關(guān)注
- 1740 瀏覽
添加回答
舉報
0/150
提交
取消