我是採用了兩個棧值得比較大小判斷得(可能比較浪費空間但是**我感覺簡單一點)
首先是定義乙個棧的結構元素,由於是字串型別就直接定義乙個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語言
沒有什麼要講的。順序棧的結構體裡 頭指標,尾指標,還有棧的容量。構建棧的時候,就是尋找出一片大小合適的記憶體空間,並用結構體裡的尾指標指向這片空間。頭指標開始也是指向這片空間的。壓棧就是 先判斷空間是否足夠?不夠的話,繼續分配空間 夠的話給頭指標指向的結點賦值,並把頭結點向後移一位 也就是說頭指標始...