ZBLOG

int main() { SLinkNode *L1,*L2,*L3; int n,m,a[MAXSIZE],b[MAXSIZE]; cin>>n; for(int i=0;i>a[i]; CreateListR(L1,a,n); //尾插法建表 cin>>m; for(int i=0;i>b[i]; CreateListR(L2,b,m); //尾插法建表 Merge(L1,L2,L3); ...

这段代码是一个C++程序,主要实现了以下功能:

  1. 通过尾插法建立两个单链表L1和L2;
  2. 将两个单链表合并成一个新的单链表L3;
  3. 打印输出新的单链表L3;
  4. 销毁三个单链表。

在运行程序之前,需要保证你已经定义了SLinkNode结构体,并且实现了CreateListR、Merge、DispList和DestroyList函数。具体实现如下:

  1. #include <iostream>
  2. using namespace std;
  3. const int MAXSIZE = 100; // 定义最大长度
  4. // 单链表节点结构体
  5. struct SLinkNode {
  6. int data;
  7. SLinkNode* next;
  8. };
  9. // 尾插法建立单链表
  10. void CreateListR(SLinkNode*& L, int a[], int n) {
  11. L = new SLinkNode;
  12. L->next = NULL;
  13. SLinkNode* r = L; // 尾指针
  14. for (int i = 0; i < n; ++i) {
  15. SLinkNode* p = new SLinkNode;
  16. p->data = a[i];
  17. p->next = NULL;
  18. r->next = p;
  19. r = p;
  20. }
  21. }
  22. // 合并两个有序单链表为一个新的有序单链表
  23. void Merge(SLinkNode* L1, SLinkNode* L2, SLinkNode*& L3) {
  24. SLinkNode* p1 = L1->next; // 指向L1首节点
  25. SLinkNode* p2 = L2->next; // 指向L2首节点
  26. L3 = new SLinkNode;
  27. L3->next = NULL;
  28. SLinkNode* r = L3; // 尾指针
  29. while (p1 && p2) {
  30. if (p1->data <= p2->data) {
  31. r->next = p1;
  32. p1 = p1->next;
  33. } else {
  34. r->next = p2;
  35. p2 = p2->next;
  36. }
  37. r = r->next;
  38. }
  39. if (p1)
  40. r->next = p1;
  41. if (p2)
  42. r->next = p2;
  43. }
  44. // 打印输出单链表元素
  45. void DispList(SLinkNode* L) {
  46. SLinkNode* p = L->next; // 指向首节点
  47. while (p) {
  48. cout << p->data << " ";
  49. p = p->next;
  50. }
  51. cout << endl;
  52. }
  53. // 销毁单链表
  54. void DestroyList(SLinkNode*& L) {
  55. SLinkNode* p = L;
  56. while(L != NULL)
  57. {
  58. p=L;p=L -> next;delete(p);
  59. }
  60. L=NULL ;
  61. }
  62. int main() {
  63. SLinkNode *L1, *L2, *L3;
  64. int n, m, a[MAXSIZE], b[MAXSIZE];
  65. cin >> n;
  66. for(int i=0;i<n;i++)
  67. cin>>a[i];
  68. CreateListR(L1,a,n);
  69. cin >> m;
  70. for(int i=0;i<m;i++)
  71. cin>>b[i];
  72. CreateListR(L2,b,m);
  73. Merge(L1,L2,L3);
  74. DispList(L3);
  75. DestroyList(L1);
  76. DestroyList(L2);
  77. DestroyList(L3);
  78. return 0;
  79. }

以上就是这段C++程序的完整实现。你可以根据自己的需求修改输入和输出部分,以及其他功能函数的实现。记得在使用完动态分配的内存后,要记得及时释放,避免内存泄漏。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8484

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?