C語言如何用順序棧實現回文序列判斷

2022-09-24 09:30:11 字數 1643 閱讀 2417

我是採用了兩個棧值得比較大小判斷得(可能比較浪費空間但是**我感覺簡單一點)

首先是定義乙個棧的結構元素,由於是字串型別就直接定義乙個char的陣列就可以:.

typedef struct stack

seqstack;

下來就是初始化,我這裡是用的耿國華老師的方法就直接給乙個top元素指向棧頂,傳入的指標位址:.

void initstack(seqstack *s) //初始化棧,讓top指向棧頂//

下面就是建立順序棧了,元素只要沒滿就一直可以入住:

int push(seqstack *s,char x) //壓棧,只要top小於max_size-1就可以繼續入棧//

else

}下面是核心函式,操作實現回文序列的判斷,我注釋的比較清楚直接看就可以了:

void pop(seqstack *s) //出棧操作,也是最主要的操作//

s->top=s->top-2; //讓原來的棧直接指向數字,跨過了字元@//

for(int k=0;kdata[s->top]==p->data[p->top]) //由於棧的特點先進後出,所以新棧的儲存順序和去掉@字元之後的舊棧的儲存順序是一樣的,所以這裡直接比較//

s->top--; //兩個top指標向下值//

p->top--;

if(j==0) //判斷//

}if(j!=0)

free(p); //free掉分配的空間//

}下面附上整個**:

#include

#include

#define max_size 100

typedef struct stack

seqstack;

void initstack(seqstack *s) //初始化棧,讓top指向棧頂//

int push(seqstack *s,char x) //壓棧,只要top小於max_size-1就可以繼續入棧//

else

void pop(seqstack *s) //出棧操作,也是最主要的操作//

s->top=s->top-2; //讓原來的棧直接指向數字,跨過了字元@//

for(int k=0;kdata[s->top]==p->data[p->top]) //由於棧的特點先進後出,所以新棧的儲存順序和去掉@字元之後的舊棧的儲存順序是一樣的,所以這裡直接比較//

s->top--; //兩個top指標向下值//

p->top--;

if(j==0) //判斷//

}if(j!=0)

free(p); //free掉分配的空間//

}int main()

}push(&s,x);

}pop(&s);

return 0;

}下面加乙個例子:

判斷3+1與1+3是否為回文序列

如何用C 實現棧

簡單定義 棧就是一種只允許在表尾進行插入和刪除操作的線性表 舉乙個生活中的例子 我在乙個儲物箱中,堆了一堆衣服,我的一件球衣在最下面,而我要拿這件衣服,就意味著我必須將上面的衣服全部拿出來才可以,但是由於箱子只有乙個口,我也只能從上面拿東西,心裡還默默想著,當初就不該將球衣早早的放進去,導致結果就是...

C語言 實現 順序棧

seqstack.h 標頭檔案宣告如下 include typedef int datatype 自定義資料型別,假定為整型 typedef struct seqstack 順序棧定義 seqstack typedef struct seqstack pseqstack 順序棧的指標型別 建立乙個容...

順序棧的實現C語言

沒有什麼要講的。順序棧的結構體裡 頭指標,尾指標,還有棧的容量。構建棧的時候,就是尋找出一片大小合適的記憶體空間,並用結構體裡的尾指標指向這片空間。頭指標開始也是指向這片空間的。壓棧就是 先判斷空間是否足夠?不夠的話,繼續分配空間 夠的話給頭指標指向的結點賦值,並把頭結點向後移一位 也就是說頭指標始...