顺序表的表示与实现
1 #include<iostream.h> 2 #include<stdlib.h> 3 #define LIST_INIT_SIZE 100 4 #define OK 1 5 #define OVERFLOW -2 6 #define ERROR 0 7 typedef int Status; 8 9 typedef int ElemType; 10 typedef struct 11 { 12 ElemType *elem; 13 int length; 14 int listsize; 15 }SqList; 16 17 Status InitList_Sq(SqList &L) 18 { 19 //构造一个空的线性表 20 L.elem=new ElemType[LIST_INIT_SIZE]; 21 if(!L.elem) 22 exit(OVERFLOW); 23 L.length=0; 24 L.listsize=LIST_INIT_SIZE; 25 return OK; 26 }//InitList_Sq 27 28 Status ListCreat_Sq(SqList &L,int n) 29 { 30 //创建顺序表 31 //i的合法范围为 1<=i<=L.length+1 32 ElemType x; 33 cout<<"input x(n)="<<endl; 34 for(int i=1;i<=n;++i) 35 { 36 cin>>x; 37 L.elem[i-1]=x; 38 ++L.length; 39 } 40 return OK; 41 }//ListCreat_Sq 42 43 int LocateElem_Sq(SqList L,ElemType e) 44 { 45 //在顺序表中查询第一个满足判定条件的数据元素 46 //若存在,则返回它的位序,否则返回0 47 ElemType *p; 48 int i; 49 i=1; //i的初值为第1元素的位序 50 p=L.elem; //p的初值为第1元素的存储位置 51 while(i<=L.length && (*p++!=e)) 52 ++i; 53 if(i<=L.length) 54 return i; 55 else 56 return 0; 57 }//LocateElem_Sq 58 59 Status ListInsert_Sq(SqList &L,int i,ElemType e) 60 { 61 //在顺序表L的第i个元素之前插入新的元素e 62 //i的合法范围为1<=i<=L.length+1 63 ElemType *q,*p; 64 q=&(L.elem[i-1]); //q指示插入位置 65 if(i<1||i>=L.length+1) 66 return ERROR; 67 if(L.length>=L.listsize) 68 return OVERFLOW; //当前存储空间已满,不能插入 69 for(p=&(L.elem[L.length-1]);p>=q;--p) 70 *(p+1)=*p; //插入位置及之后的元素右移 71 *q=e; //插入e 72 ++L.length; //表长增1 73 return OK; 74 }//LisInsert_Sq 75 76 Status ListDelete_Sq(SqList &L,int i,ElemType &e) 77 { 78 ElemType *q,*p; 79 if((i<1)||(i>L.length)) 80 return ERROR; //删除位置不合法 81 if(L.length==0) 82 return ERROR; //空表不能删除 83 p=&(L.elem[i-1]); //p为被删除元素的位置 84 e=*p; //被删除元素的值赋给e 85 q=L.elem+L.length-1; //表尾元素的位置 86 for(++p;p<=q;++p) 87 *(p-1)=*p; //被删除元素之后的元素左移 88 --L.length; //表长减1 89 return OK; 90 }//ListDelete_Sq 91 92 void visit_Sq(SqList L) 93 { 94 //访问顺序表的各个元素 95 for(int i=1;i<=L.length;++i) 96 { 97 cout<<L.elem[i-1]<<" "; 98 } 99 cout<<endl; 100 }//visit_Sq 101 102 103 void main() 104 { 105 SqList L; 106 ElemType x; 107 int i,n; 108 InitList_Sq(L); 109 cout<<"input sqList n="; 110 cin>>n; 111 ListCreat_Sq(L,n); 112 cout<<endl; 113 cout<<L.length<<endl; 114 visit_Sq(L); 115 cout<<"input insert i,x="; 116 cin>>i>>x; 117 if(ListInsert_Sq(L,i,x)) 118 { 119 visit_Sq(L); 120 cout<<L.length<<endl; 121 } 122 else 123 cout<<"Insert i error!\n"; 124 cout<<L.length<<endl; 125 126 cout<<"input delete i="; 127 cin>>i; 128 if(ListDelete_Sq(L,i,x)) 129 { 130 visit_Sq(L); 131 cout<<L.length<<endl; 132 } 133 else 134 cout<<"delete i error!\n"; 135 136 cout<<"input find x="; 137 cin>>x; 138 i=LocateElem_Sq(L,x); 139 if(i) 140 cout<<"L.elem["<<i-1<<"]="<<L.elem[i-1]<<endl; 141 else 142 cout<<"no find!"; 143 }