求3種演算法及所用的資料結構 測試字串是不是回文

2022-12-21 23:26:26 字數 3574 閱讀 6645

1樓:皇家庶民

#include

#include

#include

#include

#define maxsize 100

typedef struct

sequenlist;

void change(char *ch)//將字串去掉空格並將字母統一轉換成小寫

ch[i]='\0';

for(p=ch;*p!=0;p++)

*p=tolower(*p);

}int main()

i=0;

while(s->last>=0)

p[strlen(ch)]='\0';

flag=strcmp(ch,p);

if(flag==0)

printf("該字串是回文!\n");

else

printf("該字串不是回文!\n");

#include

#include

#include

#include

typedef struct

seqstack;

void change(char *ch)//將字串去掉空格並將字母統一轉換成小寫

ch[i]='\0';

for(p=ch;*p!=0;p++)

*p=tolower(*p);

}int main()

i=0;

while(s->top>=0)

p[strlen(ch)]='\0';

flag=strcmp(ch,p);

if(flag==0)

printf("該字串是回文!\n");

else

printf("該字串不是回文!\n");

#include

#include

#include

#define m 100

typedef struct

stackstru;  // 定義棧

typedef struct queuestru; //定義佇列

int main()

}while(stempty(s))           //棧中還有元素

else                     //字元不匹配

}if(flag==1)

printf("該字串是回文!\n"); //標誌位為1,完全匹配,是回文

else

printf("該字串不是回文!\n");//標誌位為0,不完全匹配,不是回文

return 0;

}int stinit(stackstru *s)

//初始化棧

int stempty(stackstru *s)

else

}           //判斷棧是否空

int stpush(stackstru *s,char x)

else                                   //棧未滿

}          //入棧操作

char stpop(stackstru *s)

else                                   //棧不為空

}         //出棧操作

int quinit(queuestru *q)

//初始化為乙個空的迴圈佇列

int quempty(queuestru *q)

else

}          //判斷佇列是否為空

int enqueue(queuestru *q,char e)

else

}         //入隊操作

char dequeue(queuestru *q)

else

}        //出隊操作

本題主要要先把字串進行轉換成常規形式,前兩種我是用乙個change()子函式把它去掉空格,再把所有字母統一成小寫形式,然後進行常規判斷,其實適用於前兩種有個更簡單的方法,定義乙個陣列儲存轉換後的字串,利用strrev函式反轉字串,再用strcmp進行判斷就可以了~第三種方法我是參考資料後改造了一下,注意這裡面是逐個讀取字元進取輸入@結束的~

手寫不易,原創更難~

不懂可追問,請及時採納哦~~

2樓:

用順序表 用棧 現在就想到這兩個

求助資料結構大神,題目是編寫乙個演算法判斷指定的字元向量是否為回文,我編寫乙個程式一直判斷為不是回文 100

3樓:上下求索君不見

錯誤的地方有兩處:

出棧函式"int pop_linkedstack(linkedstack top,elemtype x)"應該改為"int pop_linkedstack(linkedstack top,elemtype *x)",也就是說傳出引數時應該用指標變數。

回文判斷函式"int huiwen(char *line)"的while迴圈出錯,應該先將j初始化未len-1,即在while之前加一句"j = len - 1;",同時後面的j++也要變成j--。另外,進入while迴圈之後的第一條出棧語句呼叫時就不能是值呼叫,而要變成位址呼叫,也就是改成「 pop_linkedstack(top, &x);」。

下附完整**,親測通過!

#include

#include

#include

#define maxsize 256

typedef char elemtype;

typedef struct linkedstacknode

linkedstacknode, *linkedstack;

//鏈棧的初始化

linkedstack init_linkedstack()

//將資料元素x插入鏈棧的棧頂

int push_linkedstack(linkedstack top, elemtype x)

else

}//出棧

int pop_linkedstack(linkedstack top, elemtype *x)

else

}//判斷棧是否為空

int linkedstack_empty(linkedstack top)

else

}//判斷是否為回文

int huiwen(char *line)

len = strlen(line);

for (i = 0; i

資料結構作業 用結點大小為一的單鏈表測試字串是否為回文

4樓:匿名使用者

的資料否有下乙個節點的資料大,如果存在乙個節點的資料比下乙個節點大,說明不是遞增。反之如果考察到最後乙個節點之前都比下乙個節點小,那麼就是遞增

如果節點定義如下:

typedef struct lnodelnode,*linklist

演算法這樣寫:

status judge (linkedlist l)//表頭為l} 沒有注釋的:

status judge (linkedlist l)} 就這麼短。。。不知道上面那哥們怎麼做的

資料結構演算法的時間複雜度資料結構與演算法,請問時間複雜度是怎麼判定的?

按照分析慣例,假設所有單一運算的時間複雜度均為1 x n 1 while x y 1 y 1 4 兩次加法 1次乘法 1次比較 y y 1 1 時間複雜度 1 4 1 x 迴圈次數 迴圈次數是由n和y的初始值決定的,假設迴圈次數為n,y的初始值為y0,y的結束狀態為yn,有 x yn 1 yn 1 ...

資料結構c語言版,出隊入隊及依次輸出佇列的操作

你的 是想把front到rear的值全部輸出但是你下面的操作自己檢查一下沒有改變front的值,也沒有改變rear的值,所以front!rear是死迴圈 如果好一點的話 void printqueue linkqueue q 依次輸出佇列 while q front q rear 老師告訴我說是這裡...

程式設計題目不太會求大牛幫忙資料結構的題目

先把所有資料按l 4個一組進行分組,可存放在乙個二維陣列中int strs new int 4 4 strs 0 0 12,strs 0 1 22,strs 0 2 13,strs 0 3 8 strs 1 0 28,strs 1 1 33,strs 1 2 38,strs 1 3 42.然後對陣列...