博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构之表(1)顺序表的实现
阅读量:4882 次
发布时间:2019-06-11

本文共 5505 字,大约阅读时间需要 18 分钟。

SqList.h

1: # ifndef _SQLIST_H_
2: # define _SQLIST_H_
3: /************************************************************************/
4: /* 存储结构的定义                                                        */
5: /************************************************************************/
6: # define ElemType int  /*表中存储数据的类型*/
7: # define LIST_INIT_SIZE 100 /*表的初始存储空间*/
8: # define LISTINCREMENT 20 /*表存储空间的增量 */
9: 
10: typedef struct {
11:     ElemType * elem ; /*基址的指针*/
12:     int length ; /*表的长度,表中元素的个数*/
13:     int size ; /*表的容量*/
14: }SqList;
15: 
16: /************************************************************************/
17: /* 表的基本操作                                                          */
18: /************************************************************************/
19: 
20: void InitList(SqList * sqlist) ; /*初始化表*/
21: 
22: void DestoryList(SqList * sqlist) ; /*销毁表,释放存储空间*/
23: 
24: void ClearList(SqList * sqlist) ; /*将表置空*/
25: 
26: int IsEmpty(SqList * sqlist) ; /*判断表是否为空,空则返回1,否则返回0 */
27: 
28: int Length(SqList * sqlist) ; /*返回表的长度*/
29: 
30: ElemType GetElem(SqList * sqlist,int i) ; /*返回表中第i个元素*/
31: 
32: /*判断e是否为表中的元素,是则返回元素在表中的位置,否则返回-1*/
33: int LocateElem(SqList * sqlist,ElemType e) ;
34: 
35: /*用pre_e获取元素e的前驱,返回值i为前驱在表中位置*/
36: /*如果e不在表中,返回-1 */
37: /*如果e为表中的第一个元素,返回-2*/
38: int PriorElem(SqList * sqlist,ElemType e,ElemType * pre_e) ;
39: 
40: /*用next_e获取e的后继,返回值i为后继在表中的位置*/
41: /*如果e不是表中元素,返回-1*/
42: /*如果e为表中的最后一个元素,返回-2*/
43: int NextElem(SqList * sqlist,ElemType e ,ElemType * next_e) ;
44: 
45: /*在位置i处插入元素e,成功则返回表的长度,否则返回0*/
46: int Insert(SqList * sqlist,ElemType e , int i ) ;
47: 
48: /*删除表中的元素e,成功返回1,否则返回0*/
49: int Delete(SqList * sqlist,ElemType e) ;
50: 
51: /*遍历*/
52: void traverse(SqList * sqlist) ;
53: 
54: # endif

SqList.c

1: # include "SqList.h"
2: # include 
3: # include 
4: 
5: /*初始化表*/
6: void InitList(SqList * sqlist) {
7:     sqlist->elem = (ElemType *) malloc(LIST_INIT_SIZE) ;
8:     if(!sqlist->elem)
9:         exit(0) ;
10:     sqlist->length = 0 ;
11:     sqlist->size = LIST_INIT_SIZE ;
12: }
13: 
14: /*销毁表,释放存储空间*/
15: void DestoryList(SqList * sqlist) {
16:     if(sqlist->elem)
17:         free(sqlist->elem) ;
18: }
19: 
20: /*将表置空*/
21: void ClearList(SqList * sqlist) {
22:     if(sqlist->elem)
23:         sqlist->length = 0 ;
24: }
25: 
26: /*判断表是否为空,空则返回1,否则返回0 */
27: int IsEmpty(SqList * sqlist) {
28:     if(sqlist->elem) {
29:         if(sqlist->length > 0)
30:                 return 0 ;
31:             else
32:                 return 1 ;
33:     }
34:     else
35:         return -1 ;
36:
37: }
38: 
39: /*返回表的长度*/
40: int Length(SqList * sqlist) {
41:     if(sqlist->elem)
42:         return sqlist->length ;
43:     else
44:         return -1 ;
45: }
46: 
47: /*返回表中第i个元素*/
48: ElemType GetElem(SqList * sqlist,int i) {
49:     if( (i-1) > sqlist->length || i < 0)
50:         return -1000 ;
51:     return *(sqlist->elem + (i-1)) ;
52: }
53: 
54: /*判断e是否为表中的元素,是则返回元素在表中的位置,否则返回-1*/
55: int LocateElem(SqList * sqlist,ElemType e) {
56:     int i ;
57:     for( i = 0 ; i < sqlist->length ; i ++) {
58:         if( e == *(sqlist->elem + i) )
59:             return i ;
60:     }
61:     return -1 ;
62: }
63: 
64: /*用pre_e获取元素e的前驱,返回值i为前驱在表中位置*/
65: /*如果e不在表中,返回-1 */
66: /*如果e为表中的第一个元素,返回-2*/
67: int PriorElem(SqList * sqlist,ElemType e,ElemType * pre_e) {
68:     int local ; //元素e在表中的位置
69:     local = LocateElem(sqlist,e) ;
70:     if(local == -1) //表中不存在该元素
71:         return -1 ;
72:     if(local == 0) //表中的第一个元素
73:         return -2 ;
74:     *pre_e = *(sqlist->elem + (local - 1)) ;
75:     return (local - 1) ;
76: }
77: 
78: /*用next_e获取e的后继,返回值i为后继在表中的位置*/
79: /*如果e不是表中元素,返回-1*/
80: /*如果e为表中的最后一个元素,返回-2*/
81: int NextElem(SqList * sqlist,ElemType e ,ElemType * next_e) {
82:     int local ;
83:     local = LocateElem(sqlist,e) ;
84:     if(local == -1) //表中不存在该元素
85:         return -1 ;
86:     if(local == 0) //表中的第一个元素
87:         return -2 ;
88:     *next_e = *(sqlist->elem + (local + 1)) ;
89:     return (local + 1) ;
90: }
91: 
92: /*在位置i处插入元素e,成功则返回1,否则返回0*/
93: int Insert(SqList * sqlist,ElemType e , int i ) {
94:     ElemType * temp ;
95:     int cursor ;
96:     if(sqlist->length >= sqlist->size) {
97:         temp = (ElemType *)realloc(sqlist->elem,(LIST_INIT_SIZE + LISTINCREMENT) * sizeof(ElemType) ) ;
98:         if(!temp)
99:             exit(0) ;
100:         else {
101:             sqlist->elem = temp ;
102:             sqlist->size += LISTINCREMENT ;
103:         }
104:     }
105: 
106:     for(cursor = sqlist->length ; cursor >= i ; cursor --) {
107:         *(sqlist->elem + (cursor + 1)) = *(sqlist->elem + cursor) ;
108:     }
109: 
110:     *(sqlist->elem + i) = e ;
111: 
112:     return ++ sqlist->length ;
113: }
114: 
115: /*删除表中的元素e,成功返1,否则返回0*/
116: int Delete(SqList * sqlist,ElemType e) {
117:     int local ;
118:     local = LocateElem(sqlist,e) ;
119:     if(local == -1) //表中不存在该元素
120:         return 0 ;
121: 
122:     for(; local < sqlist->length ; local++)
123:         *(sqlist->elem + local) = *(sqlist->elem + (local - 1)) ;
124: 
125:     --sqlist->length ;
126:     return 1 ;
127: }
128: 
129: /*遍历*/
130: void traverse(SqList * sqlist) {
131:     int i = 0 ;
132:     if(!sqlist->elem || sqlist->length == 0)
133:         return ;
134:     for( ; i < sqlist->length ;i ++)
135:         printf("%4d",*(sqlist->elem + i)) ;
136:     printf("\n") ;
137: }

转载于:https://www.cnblogs.com/lovelq522/archive/2011/04/22/2025181.html

你可能感兴趣的文章
HDU 1272 小希的迷宫
查看>>
hdu 5412 CRB and Queries(整体二分)
查看>>
CentOS如何安装linux桌面?
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>
bzoj 2281: [Sdoi2011]黑白棋
查看>>
bzoj 4475: [Jsoi2015]子集选取
查看>>
团队开发7
查看>>
java之静态代理与动态代理
查看>>
软件测试2019:第四次作业
查看>>
201571030335 + 小学四则运算练习软件项目报告
查看>>
不用代码就能实现get与post
查看>>
gdb基本调试命令
查看>>
互联网开放平台API安全设计
查看>>
OPMN
查看>>
LOG收集系统(一):原日志至收集
查看>>
【文摘】经营十二条
查看>>
清除浮动的方法
查看>>
Logstash连接Elasticsearch异常
查看>>
洛谷P4287 [SHOI2011]双倍回文(回文自动机)
查看>>