01.#define MaxSize 50
02.typedef int ElemType;
03.typedef struct
04.{
05. ElemType data[MaxSize];
06. int length;
07.} SqList;
08.void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
09.void InitList(SqList *&L);//初始化线性表InitList(L)
10.void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
11.bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
12.int ListLength(SqList *L);//求线性表的长度ListLength(L)
13.void DispList(SqList *L);//输出线性表DispList(L)
14.bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)
15.int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
16.bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
17.bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED
list.cpp
[cpp] view plain copy
01.#include <stdio.h>
02.#include <malloc.h>
03.#include "list.h"
04.
05.//用数组创建线性表
06.void CreateList(SqList *&L, ElemType a[], int n)
07.{
08. int i;
09. L=(SqList *)malloc(sizeof(SqList));
10. for (i=0; i<n; i++)
11. L->data[i]=a[i];
12. L->length=n;
13.}
14.
15.//初始化线性表InitList(L)
16.void InitList(SqList *&L) //引用型指针
17.{
18. L=(SqList *)malloc(sizeof(SqList));
19. //分配存放线性表的空间
20. L->length=0;
21.}
22.
23.//销毁线性表DestroyList(L)
24.void DestroyList(SqList *&L)
25.{
26. free(L);
27.}
28.
29.//判定是否为空表ListEmpty(L)
30.bool ListEmpty(SqList *L)
31.{
32. return(L->length==0);
33.}
34.
35.//求线性表的长度ListLength(L)
36.int ListLength(SqList *L)
37.{
38. return(L->length);
39.}
40.
41.//输出线性表DispList(L)
42.void DispList(SqList *L)
43.{
44. int i;
45. if (ListEmpty(L)) return;
46. for (i=0; i<L->length; i++)
47. printf("%d ",L->data[i]);
48. printf("\n");
49.}
50.
51.//求某个数据元素值GetElem(L,i,e)
52.bool GetElem(SqList *L,int i,ElemType &e)
53.{
54. if (i<1 || i>L->length) return false;
55. e=L->data[i-1];
56. return true;
57.}
58.
59.//按元素值查找LocateElem(L,e)
60.int LocateElem(SqList *L, ElemType e)
61.{
62. int i=0;
63. while (i<L->length && L->data[i]!=e) i++;
64. if (i>=L->length) return 0;
65. else return i+1;
66.}
67.
68.//插入数据元素ListInsert(L,i,e)
69.bool ListInsert(SqList *&L,int i,ElemType e)
70.{
71. int j;
72. if (i<1 || i>L->length+1)
73. return false; //参数错误时返回false
74. i--; //将顺序表逻辑序号转化为物理序号
75. for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置
76. L->data[j]=L->data[j-1];
77. L->data[i]=e; //插入元素e
78. L->length++; //顺序表长度增1
79. return true; //成功插入返回true
80.}
81.
82.//删除数据元素ListDelete(L,i,e)
83.bool ListDelete(SqList *&L,int i,ElemType &e)
84.{
85. int j;
86. if (i<1 || i>L->length) //参数错误时返回false
87. return false;
88. i--; //将顺序表逻辑序号转化为物理序号
89. e=L->data[i];
90. for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移
91. L->data[j]=L->data[j+1];
92. L->length--; //顺序表长度减1
93. return true; //成功删除返回true
94.}
main.cpp
[cpp] view plain copy
01.#include "list.h"
02.#include <stdio.h>
03.
04.void unionList(SqList *LA, SqList *LB, SqList *&LC)
05.{
06. int lena,i;
07. ElemType e;
08. InitList(LC);
09. for (i=1; i<=ListLength(LA); i++) //将LA的所有元素插入到Lc中
10. {
11. GetElem(LA,i,e);
12. ListInsert(LC,i,e);
13. }
14. lena=ListLength(LA); //求线性表LA的长度
15. for (i=1; i<=ListLength(LB); i++)
16. {
17. GetElem(LB,i,e); //取LB中第i个数据元素赋给e
18. if (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中
19. ListInsert(LC,++lena,e);
20. }
21.}
22.
23.//用main写测试代码
24.int main()
25.{
26. SqList *sq_a, *sq_b, *sq_c;
27. ElemType a[6]= {5,8,7,2,4,9};
28. CreateList(sq_a, a, 6);
29. printf("LA: ");
30. DispList(sq_a);
31.
32. ElemType b[6]= {2,3,8,6,0};
33. CreateList(sq_b, b, 5);
34. printf("LB: ");
35. DispList(sq_b);
36. unionList(sq_a, sq_b, sq_c);
37. printf("LC: ");
38. DispList(sq_c);
39. return 0;
40.}
求集合 并集
最新推荐文章于 2020-03-08 16:26:17 发布