数据结构——顺序表
来源:互联网 发布:施工组织设计软件 编辑:程序博客网 时间:2024/05/21 01:53
顺序表静态存储数组空间由编译器固定分配,程序执行结后此空间自动释放,可按照数组元素的下标(位置)存取任一元素的值,所化费时间相同。一旦数据空间占满,再加入新的数据就将产生溢出,此时存储空间不能扩充,就会导致程序停止工作1 //顺序表静态存储 2 #define maxSize 100 3 typedef int DataType; 4 typedef struct 5 { 6 DataType data[maxSize]; 7 int n; 8 }SeqList; 9 10 顺序表动态存储通过动态存储分配的语句malloc或new动态分配的,一旦数据空间占满,可以另外再分配一块更大的空间,用以代换原来的存储空间,而达到扩充存储数组空间的目的 11 //顺序表动态存储 12 #define initSize 100 13 typedef int DataType; 14 typedef struct 15 { 16 DataType *data; 17 int maxSize, n; 18 }SeqList; 19 //顺序表主要操作实现 20 //顺序表的动态存储表示的初始化处理 21 void initList(SeqList &L) 22 { 23 L.data = new DataType[initList]; 24 if(!L.data) 25 { 26 cerr<<"存储分配错误!\n"; 27 exit(1); 28 } 29 L.maxSize = initSize; 30 L.n = 0; 31 } 32 //清空顺序表 33 void clearList(SeqList& L) 34 { 35 L.n = 0;//顺序表当前长度置为0 36 }
37 //计算顺序表长度 38 void Length(SeqList) 39 { 40 return L.n;//返回顺序表的当前长度 41 } 42 //判表空否 43 int ieEmpty(SeqList& L) 44 { 45 return (L.n == 0)?1:0; 46 } 47 //判表满否 48 int is Full(SeqList) 49 { 50 return (L.n == L.maxSize)?1:0; 51 } 52 //顺序表查找算法 53 int Search(SeqList& L, int i)// 在顺序表查找与值x匹配的位置,查找成功则函数返回该元素的位置,否则函数返回0 54 { 55 for(i = 1; i<=L.n; i++) 56 { 57 if(L.data[i-1] == x)//顺序查找 58 return i; 59 } 60 return 0;//查找失败 61 } 62 //顺序表定位算法 63 int Locate(SeqList& L, int i)//函数返回第i个元素的位置 64 { 65 if(i>1 && i<L.n) 66 return i; 67 else 68 return 0; 69 }
70 //顺序表复制算法 71 int Copy(SeqList& L1, SeqList& L2)//L1,L2存在且L1为空,将L2复制到L1中 72 { 73 L1.maxSize = L2.maxSize; 74 L1.n = L2.n; 75 if(!L1.data) 76 { 77 L1.data = new DataType[L1.maxSize];//创建顺序表存储数组 78 if(!L1.data)//链接stdlib.h和iostream.h 79 { 80 cout<<"内存分配错误!"<<endl; 81 exit(1); 82 } 83 } 84 for(int i=1; i<=L; i++) 85 { 86 L1.data[i-1] = L2.data[i-1]; 87 } 88 } 89 //顺序表插入算法 90 int Insert(SeqList& L, int i;, DataType& x) 91 { 92 //将新元素插入到表中第i个位置,若插入成功函数返回1,否则返回0 93 if(L.n == L.maxSize)//表满,不能插 94 return 0; 95 if(i<0 || i>L.n+1)//参数i不合理,不能插入 96 return 0; 97 for(int j=L.n; j>=i; j--)//依次后移,空出第i号位置 98 { 99 L.data[j] = L.data[j-1];100 }101 L.data[i-1] = x;//插入102 L.n++; //表长度加1103 return 1; //插入成功104 }
105 //顺序表删除算法106 int Remove(SeqList& L, int i, DataType& x)107 {108 //删除顺序表第i个元素,通过引用型参数x返回删除元素的值109 //若删除成功则函数返回1,否则返回0110 if(!L.n)//表空,不能删除111 return 0;112 if(i<0 || i>L.n)//参数i不合理,不能删除113 return 0;114 x = L.sata[i-1];//存被删元素的值115 for(int j = i; j<L.n; j++)//依次前移,填补116 L.data[j-1] = L.data[j];117 L.n--; //表长度减1118 return 1;//删除成功119 }120 121 122 123 124 //举例125 //集合的并运算的实现126 void Merge(SeqList& LA, SeqList& LB)127 {128 //合并顺序表LA和LB,结果存于LA,重复元素只留一个129 int n=Length(LA), m=Length(LB), i, k, x;130 for(i=1; i<=m; i++)131 {132 x = LB.data[i-1];//在LB中取一元素133 k = Search(LA, x);//在LA中查找它134 if(k == 0)//若在LA中未找到则将它插入到LA中135 {136 Insert(LA, n+1, x);//插入到第n个元素后137 n++;138 }139 }140 }141 //集合的交运算的实现
142 void Intersection(SeqList& LA, SeqList& LB)
143 {
144 //求顺序表LA和LB中的共有元素,结果存于LA
145 int n=Length(LA), m=Length(LB), i=1, k, x;
146 while(i <= n)
147 {
148 x = LA.data[i-1]; //在LA取一元素
149 k = Search(LB, x);//在LB中查找它
150 if(k == 0)//若在LB中未找到则从LA中删除它
151 {
152 Remove(LA, i, x);//在LA中删除它
153 n--;
154 }
155 else
156 i++;
157 }
158 }
阅读全文
0 0
- 数据结构—顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- 数据结构—顺序串
- 数据结构——顺序表有序顺序表归并
- 数据结构——顺序表有序顺序表查询
- 顺序表的插入——数据结构
- c#数据结构学习——顺序表
- 数据结构的实现——顺序表
- C++数据结构——顺序表
- LinuxC多线程详解
- Special Matrices
- JAVA教程到处都是 你知道如何学习JAVA编程吗
- Background execution not allowed:
- 链式物理结构(动态分配节点)
- 数据结构——顺序表
- SurfaceView相关概念的整理
- Java Web自定义MVC框架
- Java菜鸟学习日记36
- IntelliJ IDEA 当pom.xml更新时,自动加载pom.xml
- java乱码问题处理
- 华为OJ python实现
- (CVTE 笔试题)已知一个数组,不使用除法构造另一数组。
- 如何从零开始学Java