• 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. }

  • 相关阅读:
    九、多项式朴素贝叶斯算法(Multinomial NB,Multinomial Naive Bayes)(有监督学习)
    Towards Class-Oriented Poisoning Attacks Against Neural Networks 论文笔记
    Vue中模板语法与el 和 data 的两种写法
    [开源]MIT开源协议,基于Vue3.x可视化拖拽编辑,页面生成工具
    Linux搭建局域网私有yum仓库/配置本地光盘镜像仓库/搭建公有yum仓库--7700字详谈
    Qucs初步使用指南(不是multism)
    解决使用svg绘制后下载图片以及下载svg内部嵌套image图片失败的问题。
    如何对SAP数据库表进行增删改查操作(3)
    认识Vue
    day24-selenium基本操作
  • 原文地址:https://blog.csdn.net/weixin_73609038/article/details/133691305