线性表之顺序表示及实现
来源:互联网 发布:javascript的设计模式 编辑:程序博客网 时间:2024/05/16 10:15
线性表的特点为:存在唯一的一个首元素;除第一个元素外,都只有一个前驱元素;除最后一个外,都只有一个后继元素。线性表作为一种最简单的数据结构,为N个数据元素的有限序列,其按照存储方式可以分为顺序表和链式表。
首先看顺序表,顾名思义,顺序表即利用一组地址连续的存储单元依次存储线性表中的元素,优点是可随机存取,缺点是不利于删除及插入等操作。
顺序表的数据结构如下:
struct Sqlist{ElemType *elem;int listSize;int length;};
其中ElemType为线性表中数据元素的类型,定义方式为typedef int ElemType;
下面以线性表的插入、删除、合并及查找来了解及熟悉线性表的操作。
#include<iostream>using namespace std;typedef int ElemType;const int listInitSize = 50;const int listIncrementSize = 10;struct Sqlist{ElemType *elem;int listSize;int length;};//初始化线性表void initSqlist(Sqlist &L){L.elem = (ElemType*)malloc(listInitSize*sizeof(ElemType));if(!L.elem)exit(-1);L.length = 0;L.listSize = listInitSize;}//插入元素void insertSqlist(Sqlist &L,ElemType elem,int pos){if(pos>L.listSize||pos>L.length){cout<<"超出范围"<<endl;exit(-1);}for(int i=0;i<L.length-pos;i++){L.elem[L.length-i] = L.elem[L.length-i-1];}L.elem[pos] = elem;L.length++;if(L.length == L.listSize){ElemType *newbase = (ElemType*)realloc(L.elem,(L.listSize+listIncrementSize)*sizeof(ElemType));L.elem = newbase;L.listSize += listIncrementSize;}}//删除元素void deleteSqlist(Sqlist &L,int pos){if(pos>L.length){cout<<"sorry,线性表中的数据元素没这么多"<<endl;exit(-1);}for(int i=0;i<pos;i++){L.elem[pos] = L.elem[pos+1];}L.length--;}//判断元素是否在线性表中bool exist(Sqlist L,ElemType elem){for(int i=0;i<L.length;i++){if(L.elem[i] == elem){return true;}}return false;}//合并线性表void mergeSqlist(Sqlist &L1,Sqlist L2){for(int i=0;i<L2.length;i++){if(!exist(L1,L2.elem[i])){insertSqlist(L1,L2.elem[i],L1.length);}}}//销毁线性表void destroySqlist(Sqlist &L){if(!L.elem){cout<<"线性表不存在"<<endl;exit(0);}free(L.elem);L.elem = NULL;L.length = 0;L.listSize = 0;}//打印线性表void printSqlist(Sqlist L){cout<<"线性表的元素为:"<<endl;for(int i=0;i<L.length;i++){cout<<L.elem[i]<<" ";}cout<<endl;}void main(){Sqlist L1;initSqlist(L1);for(int i=0;i<15;i++){insertSqlist(L1,i*2,i);}printSqlist(L1);Sqlist L2;initSqlist(L2);for(int j=0;j<15;j++){insertSqlist(L2,j*3,j);}printSqlist(L2);mergeSqlist(L1,L2);printSqlist(L1);deleteSqlist(L1,4);printSqlist(L1);destroySqlist(L1);destroySqlist(L2);printSqlist(L1);printSqlist(L2);}
- 线性表之顺序表示及实现
- 线性表的顺序表示及实现
- 线性表之顺序表示与实现
- 线性表之顺序表示
- 线性表的顺序表示及实现(C语言编写)
- 数据结构之:线性表的顺序表示和实现
- 数据结构之线性表的顺序表示和实现
- 线性表之顺序表示算法实现(一)
- 线性表之2.2顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- 线性表的顺序表示与实现
- 线性表的顺序表示和实现
- 线性表的顺序表示与实现
- 线性表的顺序表示和实现
- 线性表的顺序表示和实现
- Python的os模块常用属性及方法介绍
- LCD驱动调试中部分常见问题的分析及解决办法
- 自学风雨路(代码学习,附上运行截图)《简易在线聊天系统》
- 三星辉煌藏隐忧 太依赖Android系统
- Shell中脚本变量和函数变量的作用域
- 线性表之顺序表示及实现
- 指针和数组
- Oracle认证:Linux与Windows的技术比较
- android 多点触摸实现图片缩放
- 润乾报表在J2EE上的部署——tomcat版
- linux中的inotify
- struts2配置问题急求 myeclipse9.0 在线等候
- table细线表格
- Webdrivier api 学习