栈
P71-4.设单链表的表头指针为L,节点结构有data和next两个域构成,其中data域为字符型。试设计算法判断该链表的全部n个字符是否中心对称。例如xyx,xyyx都是中心对称。
算法思想:使用栈来判断链表中的数据是否中心对称。
让链表前一半元素依次进栈。
在处理链表的后一半元素时,当访问到链表的一个元素后,就从栈中弹出一个元素,两个元素比较,若相等,则将链表中的下一个元素与栈中再弹出的元素比较,直至链表到尾。这时若栈是空栈,则得出链表中心对称的结构;否则,当链表中的一个元素与栈中弹出的元素不等时,结论为链表非中心对称,结束算法执行。
int dc(LinkList L,int n){
//L是带头结点的n个元素单链表,本算法判断链表是否是中心对称
int i;
char s[n/2]; //s字符栈
p = L->next; //p是链表的工作指针,指向待处理的当前元素
for(i=0;i<n/2;i++){ //链表前一半元素进栈
s[i] = p->data;
p = p->next;
}
i--; //恢复最后的i值
if(n%2==1) p = p->next;
while(p && s[i] == p->data){ //检测是否中心对称
i--; //i充当栈顶指针
p = p->next;
}
if(i==-1) return 1;//栈为空栈 则链表中心对称
return 0; //链表中心不对称
}