c语言编程:判定一个字符是否是回文串(回文串是指从开头读和从末尾读均为相同字符的字符串,例如:abcba

如题所述

采用链栈实现算法,代码如下:

#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),始终指向栈底元素。

我们知道为了方便描述链表的各种操作,引进了头节点的概念,即为每个链表前面加一个头节点,但并存放有效数据;同样,为了实现栈的操作,我们同样需要一个不存放任何有效数据的节点,并且栈底指针始终指向该节点。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网