• 3 判断单链表的对称性


    3 判断单链表的对称性

    作者: 冯向阳时间限制: 1S章节: 课程设计

    问题描述 :

    设带头结点的单链表的头指针为head,结点结构由data和next两个域构成,其中data域为字符型。在使用单链表ADT的基础上,设计一算法判断该链表的前n个字符是否中心对称。例如 x, xyx,  xyyx都是中心对称。

    参考函数原型:

    //判断单链表的前n个结点是否中心对称 

    template<class ElemType>

    bool Judge_Symmetry( LinkList<ElemType> &L, int num );

    输入说明 :

    第一行:顺序表A的数据元素的数据类型标记(0:int,1:double,2:char,3:string)

    第二行:待判断对称性的链表长度n

    第三行:单链表A的数据元素(数据元素之间以空格分隔)

    注意:单链表A中的元素个数可能小于n,也可能大于n。如果元素个数小于n,则判断整个单链表是否对称。

    输出说明 :

    如第一行输入值为0、1、2、3之外的值,直接输出“err”

    否则:

    第一行:单链表A的遍历结果(数据元素之间以"->"分隔)

    空行

    第三行:true(对称)

                 false(不对称)

    输入范例 :

    2
    10
    A B C D E E D C B A X Y

    -----------------

    A->B->C->D->E->E->D->C->B->A->X->Y

    true

    --------------------------------

    1. #include<iostream>
    2. #include<stack>
    3. using namespace std;
    4. int length = 0;
    5. template<class T>
    6. struct student
    7. {
    8. T data;
    9. student<T>* next = NULL;
    10. };
    11. template<class T>
    12. void creat(student<T>& begin, int& n)
    13. {
    14. student<T>* r = &begin;
    15. T temp;
    16. while(cin>>temp)
    17. {
    18. student<T>* p;
    19. p = new student<T>;
    20. p->data=temp;
    21. r->next = p;
    22. r = p;
    23. length++;
    24. }
    25. }
    26. template<class T>
    27. void display(student<T>& head, int number)
    28. {
    29. student<T>* p = head.next;
    30. while (p != NULL)
    31. {
    32. cout << p->data;
    33. if (p->next != NULL)
    34. {
    35. cout << "->";
    36. }
    37. p = p->next;
    38. }
    39. cout << endl;
    40. }
    41. template<class T>
    42. void check(student<T>& head, int number)
    43. {
    44. if (number == 1)
    45. {
    46. cout << "true";
    47. return;
    48. }
    49. stack<T> m;
    50. if (number % 2 == 0)
    51. {
    52. student<T>* p = head.next;
    53. for (int i = 0; i < number / 2; i++)
    54. {
    55. m.push(p->data);
    56. p = p->next;
    57. }
    58. while (!m.empty())
    59. {
    60. if (p->data == m.top())
    61. {
    62. p = p->next;
    63. m.pop();
    64. }
    65. else
    66. {
    67. cout << "false" << endl;
    68. return;
    69. }
    70. }
    71. cout << "true" << endl;
    72. }
    73. else if (number % 2 != 0)
    74. {
    75. student<T>* p = head.next;
    76. for (int i = 0; i < number / 2; i++)
    77. {
    78. m.push(p->data);
    79. p = p->next;
    80. }
    81. p = p->next;
    82. while (!m.empty())
    83. {
    84. if (p->data == m.top())
    85. {
    86. p = p->next;
    87. m.pop();
    88. }
    89. else
    90. {
    91. cout << "false" << endl;
    92. return;
    93. }
    94. cout << "true" << endl;
    95. }
    96. }
    97. }
    98. int main()
    99. {
    100. int n;
    101. int m;
    102. cin >> n;
    103. cin >> m;
    104. if (n == 0)
    105. {
    106. student<int> a;
    107. student<int> head;
    108. creat(head, m);
    109. display(head, m);
    110. cout << endl;
    111. if(length>=m)
    112. check(head, m);
    113. else
    114. {
    115. check(head, length);
    116. }
    117. }
    118. else if (n == 1)
    119. {
    120. student<double> a;
    121. student<double> head;
    122. creat(head, m);
    123. display(head, m);
    124. cout << endl;
    125. if (length >= m)
    126. check(head, m);
    127. else
    128. {
    129. check(head, length);
    130. }
    131. }
    132. else if (n == 2)
    133. {
    134. student<char> a;
    135. student<char> head;
    136. creat(head, m);
    137. display(head, m);
    138. cout << endl;
    139. if (length >= m)
    140. check(head, m);
    141. else
    142. {
    143. check(head, length);
    144. }
    145. }
    146. else if (n == 3)
    147. {
    148. student<string> a;
    149. student<string> head;
    150. creat(head, m);
    151. display(head, m);
    152. cout << endl;
    153. if (length >= m)
    154. check(head, m);
    155. else
    156. {
    157. check(head, length);
    158. }
    159. }
    160. else
    161. {
    162. cout << "err" << endl;
    163. }
    164. }

  • 相关阅读:
    图形/多段线内缩外扩思路
    求解多目标多旅行商问题的非支配排序遗传算法(NSGA-II)
    选择图像区域矩形框控件【原创】
    Springboot企业差旅报销系统_5h38k计算机毕业设计-课程设计-期末作业-毕设程序代做
    【心理学】2022-08-08 日常生活问题回答
    骑行运动耳机哪个好,列举五款适合在骑行过程中佩戴的耳机
    微机原理(汇编语言)学习
    嵌入式开发:5个修订控制最佳实践
    计算机毕业设计选什么题目好?springboot 试题库管理系统
    [附源码]SSM计算机毕业设计朋辈帮扶系统JAVA
  • 原文地址:https://blog.csdn.net/Ultravioletrays/article/details/125508298