• A (1087) : DS单链表--类实现


    Description

    用C++语言和类实现单链表,含头结点

    属性包括:data数据域、next指针域

    操作包括:插入、删除、查找

    注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据

    类定义参考

    1. #include
    2. using namespace std;
    3. #define ok 0
    4. #define error -1
    5. // 链表结点定义
    6. class ListNode
    7. {
    8. public:
    9. int data;
    10. ListNode *next;
    11. ListNode() {next = NULL;}
    12. };
    13. // 带头结点的单链表类定义
    14. class LinkList
    15. {
    16. public:
    17. ListNode *head;
    18. int len;
    19. // 操作定义
    20. LinkList();
    21. ~LinkList();
    22. ListNode *LL_index(int i); // 返回第i个结点的指针,如果不存在返回NULL
    23. int LL_get(int i); // 获取第i个元素的数据
    24. int LL_insert(int i, int item); // 把数值item插入第i个位置
    25. int LL_del(int i); // 删除第i个结点
    26. void LL_display(); // 输出单链表的内容
    27. };
    28. LinkList::LinkList()
    29. {
    30. head = new ListNode();
    31. len = 0;
    32. }
    33. LinkList::~LinkList()
    34. {
    35. ListNode *p, *q;
    36. p = head;
    37. while(p != NULL)
    38. {
    39. q = p;
    40. p = p->next;
    41. delete q;
    42. }
    43. len = 0;
    44. head = NULL;
    45. }
    46. void LinkList::LL_display()
    47. {
    48. ListNode *p;
    49. p = head->next;
    50. while(p)
    51. {
    52. cout << p->data << ' ';
    53. p = p->next;
    54. }
    55. cout << endl;
    56. }

    Input

    • 第1行先输入n表示有n个数据,接着输入n个数据
    • 第2行输入要插入的位置和新数据
    • 第3行输入要插入的位置和新数据
    • 第4行输入要删除的位置
    • 第5行输入要删除的位置
    • 第6行输入要查找的位置
    • 第7行输入要查找的位置

    Output

    数据之间用空格隔开,

    第1行输出创建后的单链表的数据

    每成功执行一次操作(插入或删除),输出执行后的单链表数据

    每成功执行一次查找,输出查找到的数据

    如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

    Sample

     

     AC代码:

    1. #include
    2. using namespace std;
    3. #define ok 0
    4. #define error -1
    5. // 链表结点定义
    6. class ListNode
    7. {
    8. public:
    9. int data;
    10. ListNode* next;
    11. ListNode() { next = NULL; }
    12. };
    13. // 带头结点的单链表类定义
    14. class LinkList
    15. {
    16. public:
    17. ListNode* head;
    18. int len;
    19. // 操作定义
    20. LinkList();
    21. ListNode* LL_index(int i) {}; // 返回第i个结点的指针,如果不存在返回NULL
    22. void LL_get(int i) {
    23. if (i <= 0 || i > len ) {
    24. cout << "error" << endl;
    25. }
    26. else {
    27. ListNode* p;
    28. p = head;
    29. for (int j = 0; j < i; j++) {
    30. p = p->next;
    31. }
    32. cout << p->data << endl;
    33. }
    34. }; // 获取第i个元素的数据
    35. void LL_insert(int i, int item) {
    36. if (i <= 0 || i > len + 1) {
    37. cout << "error" << endl;
    38. }
    39. else {
    40. ListNode* p;
    41. p = head;
    42. for (int j = 1; j < i; j++) {
    43. p = p->next;
    44. }
    45. ListNode* s = new ListNode;
    46. s->data = item;
    47. s->next = p->next;
    48. p->next = s;
    49. p = s;
    50. len++;
    51. LL_display();
    52. }
    53. }; // 把数值item插入第i个位置
    54. void LL_del(int i) {
    55. if (i <= 0 || i > len) {
    56. cout << "error" << endl;
    57. }
    58. else {
    59. ListNode* p;
    60. p = head;
    61. for (int j = 1; j < i; j++) {
    62. p = p->next;
    63. }
    64. p->next = p->next->next;
    65. LL_display();
    66. len--;
    67. }
    68. }; // 删除第i个结点
    69. void LL_display(); // 输出单链表的内容
    70. };
    71. LinkList::LinkList()
    72. {
    73. head = new ListNode();
    74. len = 0;
    75. }
    76. void LinkList::LL_display()
    77. {
    78. ListNode* p;
    79. p = head->next;
    80. while (p)
    81. {
    82. cout << p->data << ' ';
    83. p = p->next;
    84. }
    85. cout << endl;
    86. }
    87. int main() {
    88. int t;
    89. int data;
    90. cin >> t;
    91. LinkList L;
    92. ListNode* p;
    93. p = L.head;
    94. while (t--) {
    95. ListNode* s = new ListNode;
    96. L.len++;
    97. cin >> data;
    98. s->data = data;
    99. s->next = p->next;
    100. p->next = s;
    101. p = p->next;
    102. }
    103. L.LL_display();
    104. int i, item;
    105. cin >> i >> item;
    106. L.LL_insert(i, item);
    107. cin >> i >> item;
    108. L.LL_insert(i, item);
    109. cin >> i;
    110. L.LL_del(i);
    111. cin >> i;
    112. L.LL_del(i);
    113. cin >> i;
    114. L.LL_get(i);
    115. cin >> i;
    116. L.LL_get(i);
    117. }

  • 相关阅读:
    * 论文笔记 【OffDQ: An Offline Deep Learning Framework for QoS Prediction】
    toB应用私有化交付发展历程、技术对比和选型
    Hessian反序列化分析
    JavaSE之多线程高级(死锁、线程等待和唤醒)
    机器学习(一):概述
    释放搜索潜力:基于Milvus快速搭建语义检索系统(快速版),让信息尽在掌握
    “10X 程序员是如何思考的” 阅读总结
    制作频谱灯
    设计模式-Observer模式(观察者模式)
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇
  • 原文地址:https://blog.csdn.net/weixin_73609038/article/details/133691305