日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断字符串是否为回文(C语言 顺序栈)

發(fā)布時間:2024/4/11 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断字符串是否为回文(C语言 顺序栈) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先我們需要確定思路,如何用棧來判斷字符串是否為回文。
1.棧是先進后出
2.回文是指正讀反讀均相同的字符序列
從這兩點很容易就可以聯(lián)想到一個方法,我們先將字符串全部存進去棧中,再將它全部出棧,進行對比,如果完全相同則為回文,這是一個簡單并且直接的方法,但是還有沒有方法可以優(yōu)化呢?
我們可以可以通過回文的性質(zhì)聯(lián)想到先將一般的字符串存進去,出棧后再與剩下的一般進行比較,完全相同則為回文,這樣的算法比起剛才的效率高了一倍。
明確了思路就可以開始寫算法了

#include<stdio.h> #include<string.h> #include<stdlib.h> #define StackSize 100 //假定預分配的棧空間最多為100個元素 typedef char DataType;//假定棧元素的數(shù)據(jù)類型為字符typedef struct {DataType data[StackSize];int top; }SeqStack;void Init(SeqStack *&s) {s=(SeqStack *)malloc(sizeof(SeqStack));s->top=-1; } //初始化棧 void push(SeqStack *s,DataType e) {if( s->top == StackSize ){printf("棧滿\n");}else{s->top++;s->data[s->top]=e;} } //入棧 DataType pop(SeqStack *s) {if( s->top == -1 ){printf("棧空\n");return '\0';} return (s->data[s->top--]); } //出棧 int main() {SeqStack *s;int i=0,length,mid,flag=1;char str[StackSize],y,z;printf("請輸入需要判斷回文的字符串:\n");gets(str);length = strlen(str);mid = length/2-1; //mid為字符串中間字符的下標Init(s);for( i=0; i<length/2; i++){push(s,str[i]);} //入棧 if( length%2 != 0 )mid += 1; //判斷字符串長度是奇數(shù)還是偶數(shù),當為奇數(shù)時從中間下一個開始比較 for( i=1; i<=length/2; i++){if( str[mid+i] == pop(s) ){flag = 1;}else{flag = 0;break;}} if( flag == 1 )printf("該字符串為回文\n"); elseprintf("該字符串不是回文");return 0; }

因為我們先存進去一半的字符串,但如果字符串長度為奇數(shù),既有一個字符僅僅出現(xiàn)過一次時,我們可以跳過它,與出棧數(shù)據(jù)與它后邊的字符進行比較,當完全相同時,即為回文

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的判断字符串是否为回文(C语言 顺序栈)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。