88/* *定义模块**/
99
1010#include < stdio.h>
11+
1112#define MaxSize 10
1213
1314typedef struct {
1415 int data[MaxSize];
1516 int length;
16- }SqList;
17+ } SqList;
1718
1819// 函数声明
19- void PrintSqList (SqList L);
20+ void InitList (SqList &L); // 初始化
21+ bool Empty (SqList L); // 判空
22+ bool ListInsert (SqList &L, int i, int e); // 插入
23+ bool ListDelete (SqList &L, int i, int &e); // 删除
24+ int GetElem (SqList L, int i); // 按位查找
25+ int LocateElem (SqList L, int e); // 按值查找
26+ bool LocateChangeElem (SqList &L, int e, int em); // 按值修改
27+ bool getChangeElem (SqList &L, int i, int em); // 按位修改
28+
29+ void PrintSqList (SqList L); // 打印函数
30+ void testModule (); // 测试模块
2031
2132/* *定义模块**/
2233
2334/* *实现模块**/
2435
2536// 初始化
26- void InitList (SqList &L){
37+ void InitList (SqList &L) {
2738 for (int i = 0 ; i < MaxSize; i++) {
28- L.data [i]= 0 ;// 将所有元素的初始值默认设置为0
39+ L.data [i] = 0 ;// 将所有元素的初始值默认设置为0
2940 // 这一步其实可以省略,但是省略之后,有可能受到内存中"脏数据"的影响
3041 }
31- L.length = 0 ;
42+ L.length = 0 ;
3243
3344}
45+
3446// 判空
35- bool Empty (SqList L){
36- return (L.length == 0 );
47+ bool Empty (SqList L) {
48+ return (L.length == 0 );
3749}
3850
3951// 插入
40- bool ListInsert (SqList &L,int i,int e){
52+ bool ListInsert (SqList &L, int i, int e) {
4153 // 判断插入的位置是否合法,
42- if (i< 1 ||i> L.length + 1 )
54+ if (i < 1 || i > L.length + 1 )
4355 return false ;
4456 // 判断表是否存满了
45- if (L.length >= MaxSize)
57+ if (L.length >= MaxSize)
4658 return false ;
4759
4860 // 后面的元素后移
49- for (int j = L.length ; j >=i ; j--) {
50- L.data [j]= L.data [j- 1 ];
61+ for (int j = L.length ; j >= i ; j--) {
62+ L.data [j] = L.data [j - 1 ];
5163 }
52- L.data [i- 1 ]= e;
64+ L.data [i - 1 ] = e;
5365 L.length ++;
5466 return true ;
5567}
5668
5769// 删除
58- bool ListDelete (SqList &L,int i,int &e){
70+ bool ListDelete (SqList &L, int i, int &e) {
5971 // 判断i的位置是否合法
60- if (i< 0 ||i> L.length ){
72+ if (i < 0 || i > L.length ) {
6173 return false ;
6274 }
6375 // 取出将要被删除的数
64- e= L.data [i- 1 ];
76+ e = L.data [i - 1 ];
6577 // 将其后的数据前移
66- for (int j = i; j <=L.length ; j++) {
67- L.data [j- 1 ]= L.data [j];
78+ for (int j = i; j <= L.length ; j++) {
79+ L.data [j - 1 ] = L.data [j];
6880 }
6981 // 线性表长度减一
7082 L.length --;
@@ -73,19 +85,19 @@ bool ListDelete(SqList &L,int i,int &e){
7385
7486// 查找
7587// 按位查找
76- int GetElem (SqList L,int i){
88+ int GetElem (SqList L, int i) {
7789 // 判断是否越界
78- if (i< 0 ||i> L.length )
90+ if (i < 0 || i > L.length )
7991 return -1 ;
80- return L.data [i- 1 ];
92+ return L.data [i - 1 ];
8193}
8294
8395// 按值查找
84- int LocateElem (SqList L,int e){
96+ int LocateElem (SqList L, int e) {
8597 // 循环出查找
86- for (int i = 0 ; i <L.length ; i++) {
87- if (L.data [i]== e)
88- return i+ 1 ; // 返回位序
98+ for (int i = 0 ; i < L.length ; i++) {
99+ if (L.data [i] == e)
100+ return i + 1 ; // 返回位序
89101 }
90102 return -1 ;
91103}
@@ -94,50 +106,30 @@ int LocateElem(SqList L,int e){
94106// 先查找后改值
95107// 由此分为两种方式,先按位查找后改值;或先按值查找后改值
96108// 先按值查找后改值
97- bool LocateChangeElem (SqList &L,int e,int em){
109+ bool LocateChangeElem (SqList &L, int e, int em) {
98110 // 按值查找得到位序
99- int bitOrder =LocateElem (L,e);
111+ int bitOrder = LocateElem (L, e);
100112 // 改值
101- if (bitOrder !=-1 ){
102- L.data [bitOrder]= em;
113+ if (bitOrder != -1 ) {
114+ L.data [bitOrder] = em;
103115 return true ;
104- } else {
116+ } else {
105117 return false ;
106118 }
107119}
120+
108121// 先按位序查找后改值
109- bool getChangeElem (SqList &L,int i,int em){
122+ bool getChangeElem (SqList &L, int i, int em) {
110123 // 注意由于是改值涉及修改原数据,所以需要用引用传递的方式
111124 // 给的位序,首先判断i是否合法
112- if (i< 0 ||i>= L.length )return false ;
125+ if (i < 0 || i >= L.length )return false ;
113126
114127 // 由于是用数组实现的方式,可以直接利用i查找
115- L.data [i]= em;
128+ L.data [i] = em;
116129 return true ;
117130
118131}
119132
120- // Change Test
121- void ChangeTest (SqList &L,int e,int em1,int i, int em2){
122- // change 修改元数据用引用的方式
123- printf (" 开始测试【改】\n "
124- " 第一种方式先按值查找后改值\n " );
125- if (LocateChangeElem (L,e,em1)){
126- printf (" 第一种先按值查找后改值成功啦,改变后的值如下:\n " );
127- PrintSqList (L);
128- } else {
129- printf (" 第一种先按值查找后改值失败了,再检查一下吧!\n " );
130- }
131- printf (" 第二种先按位序查找后改值\n " );
132- if (getChangeElem (L,i,em2)){
133- printf (" 第二种先按位序查找后改值的方式成功啦,改变后的值如下:\n " );
134- PrintSqList (L);
135- } else {
136- printf (" 第二种先按位序查找后改值的方式失败了,再检查一下吧!\n " );
137- }
138-
139-
140- }
141133
142134// 销毁
143135// 由于静态分配方式是通过声明数组的方式实现的,故不需要手动销毁SqList表,在使用完成之后,系统会自动删除数据并回收数据空间
@@ -148,62 +140,85 @@ void ChangeTest(SqList &L,int e,int em1,int i, int em2){
148140
149141// 测试
150142// 打印整个顺序表
151- void PrintSqList (SqList L){
143+ void PrintSqList (SqList L) {
152144 // 循环打印
153145 printf (" 开始打印顺序表\n " );
154- for (int i = 0 ; i < L.length ; i++) {
155- printf (" Data[%d]==%d\n " ,i, L.data [i]);
146+ for (int i = 0 ; i < L.length ; i++) {
147+ printf (" Data[%d]==%d\n " , i, L.data [i]);
156148 }
157149 printf (" 打印结束!\n " );
158150}
159151
160152// 测试函数
161- void Test () {
153+ void testModule () {
162154 SqList L;
163155 InitList (L);
164156
165157// 初试化一些值
166- L.data [0 ]= 1 ;
167- L.data [1 ]= 2 ;
168- L.data [2 ]= 3 ;
169- L.length = 3 ;
158+ L.data [0 ] = 1 ;
159+ L.data [1 ] = 2 ;
160+ L.data [2 ] = 3 ;
161+ L.length = 3 ;
170162
171163 // 插入操作
172- if (ListInsert (L,2 , 3 )){
164+ if (ListInsert (L, 2 , 3 )) {
173165 printf (" 插入成功了\n " );
174- } else {
166+ } else {
175167 printf (" 插入失败了,i的位置不合法,请检查\n " );
176168 }
177169
178170 // 删除操作
179- int e= -1 ;
180- if (ListDelete (L,2 , e)){
181- printf (" 删除成功!删除的值是:%d\n " ,e);
182- } else {
171+ int e = -1 ;
172+ if (ListDelete (L, 2 , e)) {
173+ printf (" 删除成功!删除的值是:%d\n " , e);
174+ } else {
183175 printf (" 删除失败,请检查位序是否正确\n " );
184176 }
185177
186178 // 数组当前长度
187- printf (" 数组当前长度是多少?%d\n " ,L.length );
179+ printf (" 数组当前长度是多少?%d\n " , L.length );
188180
189181 // 查找第一个元素是什么?
190- printf (" 第一个元素是什么?\n %d\n " ,GetElem (L,1 ));
182+ printf (" 第一个元素是什么?\n %d\n " , GetElem (L, 1 ));
191183
192184 // 查找值为3的元素在什么位置
193- printf (" 第一个值为3的元素在什么位置?\n %d \n " ,LocateElem (L,3 ));
185+ printf (" 第一个值为3的元素在什么位置?\n %d \n " , LocateElem (L, 3 ));
194186
195187 // 打印输出
196188 PrintSqList (L);
197189
198190 // 测试改模块功能是否正常
199- ChangeTest (L,2 ,6 ,1 ,7 );
191+ int e1 = 2 ;
192+ int em1 = 6 ;
193+ int i = 1 ;
194+ int em2 = 7 ;
195+ printf (" 开始测试【改】\n "
196+ " 第一种方式先按值查找后改值\n " );
197+ if (LocateChangeElem (L, e1 , em1)) {
198+ printf (" 第一种先按值查找后改值成功啦,改变后的值如下:\n " );
199+ PrintSqList (L);
200+ } else {
201+ printf (" 第一种先按值查找后改值失败了,再检查一下吧!\n " );
202+ }
203+ printf (" 第二种先按位序查找后改值\n " );
204+ if (getChangeElem (L, i, em2)) {
205+ printf (" 第二种先按位序查找后改值的方式成功啦,改变后的值如下:\n " );
206+ PrintSqList (L);
207+ } else {
208+ printf (" 第二种先按位序查找后改值的方式失败了,再检查一下吧!\n " );
209+ }
210+ if (Empty (L)) {
211+ printf (" 顺序表为空!\n " );
212+ } else {
213+ printf (" 顺序表非空!\n " );
214+ }
200215
201216 // 打印输出
202217 PrintSqList (L);
203218}
204219/* *测试模块**/
205220// 主函数
206- int main (){
207- Test ();
221+ int main () {
222+ testModule ();
208223 return 0 ;
209224}
0 commit comments