数据结构-线性表顺序存储(c++)
数据结构-线性表顺序存储(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 <iostream> 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 cout<<c<<endl; 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||i<1||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<m_nLength;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(i<1||i>m_nLength+1) 75 return FALSE; 76 if(i<=m_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(i<1||i>m_nLength) 92 return FALSE; 93 *e=m_data[i-1]; 94 if(i<m_nLength) 95 { 96 for(k=i;i<m_nLength;k++) 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<m_nLength;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<=Lb_len;i++) 119 { 120 Lb.GetElem(i,&e); 121 if(!LocateElem(e)) 122 ListInsert(++La_len,e); 123 } 124 }
实例:
1 #include "List.h" 2 #include <iostream> 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="<<L.m_nLength<<endl; 14 for(j=1;j<5;j++) 15 i=L.ListInsert(1,j); 16 cout<<"在L的表头依次插入 1-5后:L.m_data="<<endl; 17 L.ListTraverse(); 18 cout<<L.m_nLength<<endl; 19 i=L.ListEmpty(); 20 cout<<"L是否空 i="<<i<<"(1:是 0:否)"<<endl; 21 i=L.ClearList(); 22 cout<<"清空L后L.m_length="<<L.m_nLength<<endl; 23 L.ListEmpty(); 24 for(j=1;j<=5;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;j<10;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 }