• 线性表应用(非递减合并、分解链表、删除线性表)


             将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它的存储空间。表中允许有重复的数据。

    1. #include
    2. using namespace std;
    3. typedef struct list
    4. {
    5. int data;
    6. list* next;
    7. }list,*linklist;
    8. void Createlist(linklist& l)
    9. {
    10. l = new list;
    11. l->next = NULL;
    12. linklist p,r;
    13. r = l;
    14. for (int i = 0; i < 5; i++)
    15. {
    16. p = new list;
    17. cin >> p->data;
    18. r->next = p;
    19. r = p;
    20. }
    21. p->next = NULL;
    22. }
    23. void Addlist(linklist& L1, linklist& L2)
    24. {
    25. linklist L3, pa, pb,p;
    26. pa = L1->next;
    27. pb = L2->next;
    28. L3 = L1, L3->next = NULL;
    29. while (pa || pb)
    30. {
    31. if (pa==NULL)
    32. {
    33. p = pb;
    34. pb = pb->next;
    35. }
    36. else if (pb==NULL)
    37. {
    38. p = pa;
    39. pa = pa->next;
    40. }
    41. else if (pa->data <= pb->data)
    42. {
    43. p = pa;
    44. pa = pa->next;
    45. }
    46. else
    47. {
    48. p = pb;
    49. pb = pb->next;
    50. }
    51. p->next = L3->next;
    52. L3->next = p;
    53. }
    54. delete L2;
    55. }
    56. void Printlist(linklist& l)
    57. {
    58. linklist p;
    59. p = l->next;
    60. while (p)
    61. {
    62. cout << p->data<<" ";
    63. p = p->next;
    64. }
    65. }
    66. int main()
    67. {
    68. linklist L1, L2;
    69. cout << "输入第一个链表:" << endl;
    70. Createlist(L1);
    71. cout << "输入第二个链表:" << endl;
    72. Createlist(L2);
    73. Addlist(L1, L2);
    74. cout << "合并链表:" << endl;
    75. Printlist(L1);
    76. }

           设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A中的元素为非零整数,要求B、C表利用A表的结点)。

    1. #include
    2. using namespace std;
    3. typedef struct list
    4. {
    5. int data;
    6. list* next;
    7. }list,*linklist;
    8. void Createlist(linklist& l)
    9. {
    10. l = new list;
    11. l->next = NULL;
    12. linklist p,r;
    13. r = l;
    14. for (int i = 0; i <10; i++)
    15. {
    16. p = new list;
    17. cin >> p->data;
    18. r->next = p;
    19. r = p;
    20. }
    21. p->next = NULL;
    22. }
    23. void Separatelist(linklist& L1, linklist& L2, linklist& L3)
    24. {
    25. L3 = new list;
    26. L3->next = NULL;
    27. linklist p,r;
    28. p = L1->next;
    29. L2 = L1;
    30. L2->next = NULL;
    31. while (p)
    32. {
    33. r = p->next;
    34. if (p->data < 0)
    35. {
    36. p->next = L2->next;
    37. L2->next = p;
    38. }
    39. else
    40. {
    41. p->next = L3->next;
    42. L3->next = p;
    43. }
    44. p = r;
    45. }
    46. }
    47. void Printlist(linklist& l)
    48. {
    49. linklist p;
    50. p = l->next;
    51. while (p)
    52. {
    53. cout << p->data<<" ";
    54. p = p->next;
    55. }
    56. cout << endl;
    57. }
    58. int main()
    59. {
    60. linklist L1, L2,L3;
    61. cout << "输入第一个链表:" << endl;
    62. Createlist(L1);
    63. Separatelist(L1, L2, L3);
    64. cout << "拆分链表:" << endl;
    65. Printlist(L2);
    66. Printlist(L3);
    67. }

     

           已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O (1)的算法,该算法删除线性表中所有值为ite m的数据元素。

    1. #include
    2. #define maxsize 100
    3. using namespace std;
    4. typedef struct node
    5. {
    6. int data;
    7. }Node;
    8. typedef struct
    9. {
    10. Node* elem;
    11. int length;
    12. }Sqlist;
    13. void Initlist(Sqlist& L)
    14. {
    15. L.elem = new Node[maxsize];
    16. L.length = 0;
    17. }
    18. int Createlist(Sqlist& L)
    19. {
    20. if (L.length == maxsize) return 0;
    21. for (int i = 0; i < 10; i++)
    22. {
    23. cin >> L.elem[i].data;
    24. L.length++;
    25. }
    26. return 1;
    27. }
    28. void Deletelist(Sqlist& L, Node e)
    29. {
    30. int k = 0;
    31. for (int i = 0; i < L.length; i++)
    32. {
    33. if (L.elem[i].data != e.data)
    34. {
    35. L.elem[k].data = L.elem[i].data;
    36. k++;
    37. }
    38. }
    39. L.length = k;
    40. }
    41. void Printlist(Sqlist L)
    42. {
    43. for (int i=0;i
    44. {
    45. cout << L.elem[i].data << " " ;
    46. }
    47. cout << endl;
    48. }
    49. int main()
    50. {
    51. Sqlist A;
    52. Initlist(A);
    53. Createlist(A);
    54. cout << "原线性表:" << endl;
    55. Printlist(A);
    56. cout << "输入要删除的一个数:" << endl;
    57. Node n;
    58. cin >> n.data;
    59. Deletelist(A,n);
    60. Printlist(A);
    61. }

     

  • 相关阅读:
    SpringBoot基于jackson对象映射器扩展mvc框架的消息转换器
    linux 安装rar工具
    2022-09-22 mysql列存储引擎-读取数据文件工具-使用说明
    Java工具篇-Git 基于IDEA管理的本地仓库同时关联多个远程仓库
    MQ通道常用知识列举(一)
    WebSocket的入门秘籍?
    基于STM32的超声波雷达项目【可拟合构建平面地图】(代码开源)
    [架构之路-14]:目标系统 - 硬件平台 - CPU、MPU、NPU、GPU、MCU、DSP、FPGA、SOC的区别
    创新创业理论研究与实践杂志社创新创业理论研究与实践编辑部2022年第18期目录
    Docker搭建redis集群
  • 原文地址:https://blog.csdn.net/qq_74156152/article/details/133176195