栈和队列

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;  //链表中心不对称
}

队列

posted @ 2021-03-08 15:34  流转~星云  阅读(112)  评论(0编辑  收藏  举报