数据结构-线性表顺序存储(c++)
标签:insert namespace public ext 赋值 empty pre 遍历 顺序
数据结构-线性表顺序存储(c++) 2018-09-06
List.h //头文件
1 #define OK 1
2 #define ERRO0R 0
3 #define TRUE 1
4 #define FALSE 0
5 #define MAXSIZE 20 //存储空间初始分配量
6
7 typedef int Status; //Status 函数结果状态码
8 typedef int ElemType; //ElemType 据具体情况而定
9
10 class SqList
11 {
12 public:
13 SqList(); //构造函数
14 ~SqList(); //析构函数
15 ElemType m_data[MAXSIZE]; //线性表数据
16 int m_nLength; //线性表长度
17 Status Visit(ElemType c); //输出c
18 Status InitList(); //初始化线性表长度
19 Status ListEmpty(); //判断线性表是否为空
20 Status ClearList(); //设置线性表长度为0
21 int ListLength(); //线性表长度
22 Status GetElem(int i,ElemType *e); //取i位子元素到e
23 int LocateElem(ElemType e); //元素e的位子
24 Status ListInsert(int i,ElemType e); //在i处插入e
25 Status ListDelete(int i,ElemType *e); //删除i处元素,元素赋值到e
26 Status ListTraverse(); //遍历输出链表
27 void UnionL(SqList Lb); //链表并集
28 }
List.h //源文件
1 #include 2 #include "List.h"
3
4 using namespace std;
5 SqList::SqList()
6 {
7 m_nLength=0;
8 }
9
10 SqList::~SqList()
11 {
12
13 }
14
15 Status SqList::Visit(ElemType c)
16 {
17 coutendl;
18 return OK;
19 }
20
21 Status SqList::InitList()
22 {
23 m_nLength=0;
24 return OK;
25 }
26
27 Status SqList::ListEmpty()
28 {
29 if(m_nLength==0)
30 return TRUE;
31 else
32 return FALSE;
33 }
34
35 Status SqList::ClearList()
36 {
37 m_nLength=0;
38 return OK;
39 }
40
41 Status SqList::ListLength()
42 {
43 return m_nLength;
44 }
45
46 Status SqList::GetElem(int i,ElemType *e)
47 {
48 if(m_nLength==0||i1||i>m_nLength)
49 return FALSE;
50 *e=m_data[i-1];
51 return OK;
52 }
53
54 Status SqList::LocateElem(ElemType e)
55 {
56 int i;
57 if(m_nLength==0)
58 return 0;
59 for(i=0;i)
60 {
61 if(m_data[i]==e)
62 break;
63 }
64 if(i>=m_nLength)
65 return 0;
66 return i+1;
67 }
68
69 Status SqList::ListInsert(int i,ElemType e)
70 {
71 int k;
72 if(m_nLength==MAXSIZE)
73 return FALSE;
74 if(i1||i>m_nLength+1)
75 return FALSE;
76 if(im_nLength)
77 {
78 for(k=m_nLength-1;k>=i-1;k--)
79 m_data[k+1]=m_data[k];
80 }
81 m_data[i-1]=e;
82 m_nLength++;
83 return OK;
84 }
85
86 Status SqList::ListDelete(int i,ElemType *e)
87 {
88 int k;
89 if(m_nLength==0)
90 return FALSE;
91 if(i1||i>m_nLength)
92 return FALSE;
93 *e=m_data[i-1];
94 if(im_nLength)
95 {
96 for(k=i;i)
97 m_data[k-1]=m_data[k];
98 }
99 m_nLength--;
100 return OK;
101 }
102
103 Status SqList::ListTraverse()
104 {
105 int i;
106 for(i=0;i)
107 Visit(m_data[i]);
108 cout"\n"endl;
109 return OK;
110 }
111
112 void SqList::UnionL(SqList Lb)
113 {
114 int La_len,Lb_len,i;
115 ElemType e;
116 La_len=ListLength();
117 Lb_len=Lb.ListLength();
118 for(i=1;i)
119 {
120 Lb.GetElem(i,&e);
121 if(!LocateElem(e))
122 ListInsert(++La_len,e);
123 }
124 }
实例:
1 #include "List.h"
2 #include 3
4 using namespace std;
5
6 void main()
7 {
8 SqList L;
9 ElemType e;
10 Status i;
11 int j,k;
12 i=L.InitList();
13 cout"初始化L后:L.length="endl;
14 for(j=1;j5;j++)
15 i=L.ListInsert(1,j);
16 cout"在L的表头依次插入 1-5后:L.m_data="endl;
17 L.ListTraverse();
18 coutendl;
19 i=L.ListEmpty();
20 cout"L是否空 i=""(1:是 0:否)"endl;
21 i=L.ClearList();
22 cout"清空L后L.m_length="endl;
23 L.ListEmpty();
24 for(j=1;j5;j++)
25 i=L.ListInsert(j,j);
26 cout"在L的表尾依次插入 1-10后:L.m_data="endl;
27 L.ListTraverse();
28 L.GetElem(5,&e);
29 SqList Lb;
30 for(j=0;j10;j++)
31 i=Lb.ListInsert(1,j);
32 cout"在L的表头依次插入 1-15后:L.m_data="endl;
33 Lb.ListTraverse();
34 L.UnionL(Lb);
35 L.ListTraverse();
36 system("pause");
37 }
数据结构-线性表顺序存储(c++)
标签:insert namespace public ext 赋值 empty pre 遍历 顺序
原文地址:https://www.cnblogs.com/XZDSF/p/9600031.html
评论