数据结构之线性表---顺序表
来源:互联网 发布:钥匙包 淘宝 编辑:程序博客网 时间:2024/06/05 20:58
顺序表:
最近一个月在学线性表,决定在国庆放假之前好好总结一下。今天,我们来总结一下线性表的知识。
首先
什么是顺序表?
顾名思义,顺序表就是有顺序的表,元素与元素之间为一对一的关系,除了第一个元素和最后一个元素以外都有自己的前驱和后继;
顺序表有什么特点?
最大的特点就是其储存结构为顺序储存结构,就是把线性表中的元素按逻辑次序依次存放在一组地址连续的存储空间中
顺序表如何操作?
利用数组的知识来解决顺序表问题;
1.顺序表的创建与初始化
简单明了,初始化:1.为指针分配空间
2.将顺序表长度复制为零
3.赋值顺序表空间大小
创建:唯一容易错的地方就是每存进一个数的时候不要忘了让其长度加一
Status InitList_Sq(SqList &L){ //初始化L为一个空的有序顺序表 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)exit(OVERFLOW); L.listsize=LIST_INIT_SIZE; L.length=0; return OK;}
//创建
Status ListCreate_Sq(SqList &L){ L.listsize = LIST_INIT_SIZE; L.elem = (ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE); L.length = 0; int n,i; scanf("%d",&n); for(i = 0; i < n; i++) { int a; scanf("%d",&a); L.elem[i] = a; L.length++; } return OK;}
2. 顺序表的清空
需要注意,顺序表的清空和销毁是有区别的,清空只是让其长度为零,而销毁需要把指针分的的空间释放;
Status ClearList(List &L){ L -> length = 0; return OK;}
3. 顺序表的销毁
Status ClearList(List &L){ free(L); L = NULL; L -> length = 0; L -> ListSize = 0;}
4. 顺序表的元素插入
Status ListInsert_SortedSq(SqList &L, ElemType e){ int i,j,flag = 0; ElemType t; if(L.length == 0) { L.elem[0] = e; L.length++; } else { for(i = 0; i < L.length; i++) { if(e <= L.elem[i]) { if(L.length > L.listsize) { L.listsize += 1; for(j = L.length - 1; j >= i; j--) L.elem[j + 1] = L.elem[j]; L.elem[i] = e; L.length += 1; flag = 1; break; } else { for(j = L.length - 1; j >= i; j--) L.elem[j + 1] = L.elem[j]; L.elem[i] = e; L.length += 1; flag = 1; break; } } } if(flag == 0) { if(L.listsize < L.length ) { L.listsize += 1; L.elem[i] = e; L.length++; } else { L.elem[i] = e; L.length++; } } }}
5. 顺序表元素的查找
int ListLocate_Sq(SqList L, ElemType e){ int i,flag = 0,place; for(i = 0; i < L.length; i++) { if(L.elem[i] == e) { flag = 1; place = i + 1; break; } } if(flag == 0) return 0; else return place;}
6. 顺序表的就地逆置
void ListReverse_Sq(SqList &L){ int i; ElemType t; for(i = 0; i < L.length / 2; i++) { t = L.elem[i]; L.elem[i] = L.elem[L.length - 1 - i]; L.elem[L.length - 1 - i] = t; }}
7. 集合的并交差运算
//库函数头文件包含#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;//顺序表的存储结构定义#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int ElemType; //假设线性表中的元素均为整型typedef struct{ ElemType* elem; //存储空间基地址 int length; //表中元素的个数 int listsize; //表容量大小}SqList; //顺序表类型定义Status InitList(SqList &L){ L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;}Status CreateList(SqList &L,int n){ int i,a; for(i = 0; i < n; i++) { if(L.listsize < L.length) L.listsize++; scanf("%d",&a); L.elem[i] = a; L.length++; } return OK;}Status CopyList(SqList &L1, SqList &L2){ L2.length = L1.length; L2.listsize = L1.listsize; int i; for(i = 0; i < L1.length; i++) L2.elem[i] = L1.elem[i]; return OK;}void PrintList(SqList &L){ int i; for(i = 0; i < L.length; i++) { printf(" %d",L.elem[i]); }}Status Union(SqList &L1,SqList &L2,SqList L3){ InitList(L3); CopyList(L1,L3); int i,j,k; for(i = 0; i < L2.length; i++) { int flag = 0; for(j = 0; j < L3.length; j++) { if(L2.elem[i] == L3.elem[j]) flag = 1; } if(flag == 0) { if(L3.length > L3.listsize) L3.listsize += 1; L3.elem[j] = L2.elem[i]; L3.length++; } } printf("%d",L3.length); PrintList(L3); return OK;}Status Intersection(SqList &L1,SqList &L2,SqList L3){ InitList(L3); int i,j,k; for(i = 0; i < L1.length; i++) { int flag = 0; for(j = 0; j < L2.length; j++) { if(L1.elem[i] == L2.elem[j]) { flag = 1; break; } } if(flag == 1) { if(L3.length > L3.listsize) L3.listsize += 1; L3.elem[L3.length] = L1.elem[i]; L3.length++; } } printf("%d",L3.length); PrintList(L3);}Status CutList(SqList &L1,SqList &L2,SqList L3){ InitList(L3); int i,j,k; for(i = 0; i < L1.length; i++) { int flag = 0; for(j = 0; j < L2.length; j++) { if(L1.elem[i] == L2.elem[j]) flag = 1; } if(flag == 0) { if(L3.length > L3.listsize) L3.listsize += 1; L3.elem[L3.length] = L1.elem[i]; L3.length++; } } printf("%d",L3.length); PrintList(L3);}int main(){ int a,b; scanf("%d %d",&a,&b); SqList L1,L2,L3; InitList(L1); InitList(L2); CreateList(L1,a); CreateList(L2,b); Union(L1,L2,L3); printf("\n"); Intersection(L1,L2,L3); printf("\n"); CutList(L1,L2,L3);}
8. 顺序表的区间删除
//库函数头文件包含#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;//顺序表的存储结构定义#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int ElemType; //假设线性表中的元素均为整型typedef struct{ ElemType* elem; //存储空间基地址 int length; //表中元素的个数 int listsize; //表容量大小}SqList; //顺序表类型定义Status InitList(SqList &L){ L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;}Status CreateList(SqList &L,int n){ int i,a; for(i = 0; i < n; i++) { if(L.listsize < L.length) L.listsize++; scanf("%d",&a); L.elem[i] = a; L.length++; } return OK;}void PrintList(SqList &L){ int i; for(i = 0; i < L.length; i++) { if(i == 0) printf("%d",L.elem[i]); else printf(" %d",L.elem[i]); }}Status CutList(SqList &L1,SqList &L2,int min,int max){ int i; for(i = 0; i < L1.length; i++) { if(L1.elem[i] > max || L1.elem[i] < min) { L2.elem[L2.length] = L1.elem[i]; L2.length++; } } return OK;}int main(){ SqList L1,L2; int n; InitList(L1); InitList(L2); scanf("%d",&n); CreateList(L1,n); int min,max; scanf("%d %d",&min,&max); CutList(L1,L2,min,max); PrintList(L2);}
阅读全文
0 0
- 数据结构之顺序线性表
- 数据结构之顺序线性表
- 数据结构线性表之顺序表实现
- 数据结构线性表之顺序表
- 数据结构线性表之顺序表
- 基本数据结构之线性表-顺序表
- 数据结构之线性表2顺序表
- 数据结构线性表之顺序表
- 数据结构:线性表之顺序表
- 数据结构:线性表之顺序表
- 数据结构线性表之定长顺序表
- 【数据结构专题】线性表之顺序表
- C数据结构-线性表之顺序表
- 数据结构之线性表---顺序表
- 数据结构 之 线性表中的顺序表
- 数据结构之线性表--顺序结构测试
- 数据结构之线性表--顺序存储
- 数据结构:线性表之顺序存储结构
- Http Header信息
- INTELLIJ IDEA 鼠标放上去提示参数
- iOS 创建pch文件Xcode9.0
- 2-sat
- Java并发总结
- 数据结构之线性表---顺序表
- Android Studio 3.0 及个版本下载和 gradle 各版本下载
- MVVMLight的使用方法
- android NDK 生产.h头文件
- POJ 1419 最大独立集 模板
- Android 应用,机顶盒,编码器,服务器,交换机之间的操作。IPTV配置
- openshift/origin学习记录(10)——基于已有镜像部署应用
- 双重map,js遍历 图片显示在页面
- 搜索系统10:机器学习算法浅析