当前位置:   article > 正文

[C语言、C++]数据结构作业:线性表合并_用c语言实现两个线性表的合并

用c语言实现两个线性表的合并

1、(5分)完成基于顺序表的合并函数:MergeSeqList(SeqList &LA, SeqList LB)

要求该函数的时间复杂度为:O(LB.Length)

====main中测试:

1、建立LA,LB,元素分别为:1,2,3,4,5以及0,9,8,7

2、遍历LA,LB

3、合并LB到LA

4、打印LA

  1. #include <iostream>
  2. using namespace std;
  3. typedef int ElemType;
  4. typedef int Status;
  5. #define MAXSIZE 100
  6. #define INITSIZE 100
  7. #define OK 1
  8. #define ERROR 0
  9. typedef struct {
  10. ElemType* elem; //存储空间的基地址
  11. int length; //当前长度
  12. int listsize;
  13. } SqList; //顺序表的结构类型为SqList
  14. Status InitList(SqList& L) {//分配
  15. L.elem = new ElemType[INITSIZE];
  16. if (!L.elem) {
  17. cout << "存储分配失败!" << endl;
  18. exit(1);
  19. return ERROR;
  20. }
  21. L.length = 0; L.listsize = INITSIZE;
  22. }
  23. Status Listinsert(SqList& L, int i, ElemType e) {//插入函数
  24. if (i < 1 || i > L.length + 1) return ERROR;
  25. if (L.length >= L.listsize) return ERROR;//老师说ListExtend()可以先不写
  26. //移动元素,对i=L.length+1,无须移动
  27. for (int j = L.length - 1; j >= i - 1; j--)
  28. L.elem[j + 1] = L.elem[j];
  29. L.elem[i - 1] = e; //实际插在数组第i-1个位置
  30. L.length++;
  31. return OK;
  32. }
  33. Status printList(SqList L)//遍历打印
  34. {
  35. if (L.length == 0)
  36. {
  37. printf("线性表为空\n");
  38. return 0;
  39. }
  40. int i;
  41. for (i = 0; i < L.length; i++)
  42. {
  43. printf("编号为%d,元素值:elem[%d]=%d\n", i + 1, i, L.elem[i]);
  44. }
  45. printf("\n");
  46. return OK;
  47. }
  48. void MergeSeqList(SqList& LA, SqList LB) {//完成基于顺序表的合并函数:MergeSeqList(SeqList &LA, SeqList LB)
  49. int N = LA.length;//要求该函数的时间复杂度为:O(LB.Length)
  50. for (int i = 1; i <= Getlength(LB); i++) {
  51. int e = 0;
  52. GetElemSq(LB, i, e);
  53. Listinsert(LA, ++N, e);
  54. }
  55. }
  56. int main(){
  57. SqList LA;
  58. SqList LB;
  59. InitList(LA);
  60. InitList(LB);
  61. int i = 0;
  62. for (i = 1; i <= 5; i++) {
  63. Listinsert(LA, i, i);//1、建立LA,LB,元素分别为:1,2,3,4,5
  64. }
  65. Listinsert(LB, 1, 0);//以及0,9,8,7
  66. Listinsert(LB, 2, 9);
  67. Listinsert(LB, 3, 8);
  68. Listinsert(LB, 4, 7);
  69. printList(LA);//2、遍历LA,LB
  70. printList(LB);
  71. MergeSeqList(LA, LB);//3、合并LB到LA
  72. printList(LA);//4、打印LA
  73. }

2、完成基于单链表的合并函数:MergeLinkList(LinkList &LA, LinkList LB)

====main中测试:

1、建立LA,LB,元素分别为:1,2,3,4,5以及0,9,8,7

2、遍历LA,LB

3、合并LB到LA

4、打印LA

  1. #include <iostream>
  2. using namespace std;
  3. typedef int ElemType;
  4. typedef struct LinkNode {
  5. ElemType data;
  6. LinkNode* next;
  7. }*LinkList;
  8. void InitLinkList(LinkList& L) {
  9. LinkNode* s = new LinkNode;
  10. s->next = NULL;
  11. L = s;
  12. }
  13. void Traverse(const LinkList& L) {
  14. LinkNode* p = L->next;
  15. while (p) {
  16. cout << p->data << endl;
  17. p = p->next;
  18. }
  19. }
  20. void CreatHead(LinkList& L, int n) {
  21. L = new LinkNode; L->next = NULL;
  22. for (int i = 0; i < n; i++) {
  23. LinkNode* s = new LinkNode;
  24. cin >> s->data;
  25. s->next = L->next;
  26. L->next = s;
  27. }
  28. }
  29. void CreatRear(LinkList& L, int n) {
  30. L = new LinkNode;
  31. LinkNode* r = L;
  32. for (int i = 0; i < n; i++) {
  33. LinkNode* s = new LinkNode;
  34. cin >> s->data;
  35. r->next = s;
  36. r = s;
  37. }
  38. r->next = NULL;
  39. }
  40. int Insert(const LinkList& L, int i, ElemType e) {
  41. LinkNode* p = L; int j = 0;
  42. while (p && j < i - 1) {
  43. p = p->next; j++;
  44. }
  45. if (!p || i < 1) return 0; //i非法。
  46. LinkNode* s = new LinkNode;
  47. s->data = e;
  48. s->next = p->next; p->next = s;
  49. return 1;
  50. }
  51. void MergeLinkList(LinkList& LA, LinkList& LB) {//2、完成基于单链表的合并数:MergeLinkList(LinkList &LA, LinkList LB)
  52. LinkNode* p=LA->next;
  53. LinkNode* r = LB->next;
  54. while (p->next) {
  55. p = p->next;
  56. }
  57. p->next = r;
  58. }
  59. int main(){
  60. LinkList LA;
  61. LinkList LB;
  62. InitLinkList(LA);//1、建立LA,LB,
  63. InitLinkList(LB);
  64. CreatRear(LA, 5);//元素分别为:1,2,3,4,5
  65. CreatRear(LB, 4);//以及0,9,8,7
  66. Traverse(LA);//2、遍历LA
  67. cout << "=======================================================" << endl;
  68. Traverse(LB);//2、遍历,LB
  69. cout << "=======================================================" << endl;
  70. MergeLinkList(LA, LB);//3、合并LB到LA
  71. Traverse(LA);//4、打印LA
  72. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/527820
推荐阅读
相关标签
  

闽ICP备14008679号