采用鏈棧實現算法,代碼如下:
#include"stdio.h"
#include"stdlib.h"
typedef char ElemType;
typedef struct stnode
{
ElemType data;
struct stnode *next;
}StNode, *LinkStack;
int huiwen(char str[])
{
int i = 0;
char ch;
StNode *sl = NULL, *p;
while ((ch = str[i++]) != '\0')
{
p = (StNode *)malloc(sizeof(StNode));
p->data = ch;
p->next = sl;
sl = p;
}
i = 0;
while (sl != NULL)
{
p = sl;
ch = p->data;
sl = sl->next;
free(p);
if (ch != str[i++])
return 0;
}
return 1;
}
void main()
{
char string[20];
int hw;
printf("input a string:");
gets_s(string);
hw = huiwen(string);
if (hw) printf("The string is HUIWEN.");
else printf("The string is not HUIWEN.");
}
擴展資料
棧的特點是先進後出,而鏈表中的頭插法正好滿足我們的需求,因為頭插法後面插入的節點位於鏈表的開頭,所以我們可以使用頭插法來插入節點,在彈出節點的時候彈出鏈表的第壹個節點即可,而第壹個節點是很容易找出來的,所以可以很輕松地實現棧的壓入和彈出操作。
棧是壹種是壹種實現數據“先進後出”的存儲結構,分為靜態棧和動態棧,靜態棧就是以數組的方式存儲數據,動態棧是以鏈表的方式存儲數據;對棧的操作算法,常用的就是壓棧和出。
棧的創建:
在創建壹個數據結構之前,必須知道這種數據結構由哪些參數組成,棧的本質既然是個鏈表,它必然由很多節點組成;為了實現“先進後出”這種數據結構,我們需要引進兩個參數,壹個是棧頂指針(pTop),始終指向棧頂元素。壹個參數是棧底指針(pBottom),始終指向棧底元素。
我們知道為了方便描述鏈表的各種操作,引進了頭節點的概念,即為每個鏈表前面加壹個頭節點,但並存放有效數據;同樣,為了實現棧的操作,我們同樣需要壹個不存放任何有效數據的節點,並且棧底指針始終指向該節點。