首页 > 代码库 > 线性表
线性表
线性表概述
线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。
线性表分为静态线性表和动态线性表,常见的有顺序表(静态的)、单向链表(动态的)和双向链表(动态的)。
线性表的操作主要包括:
(0)初始化线性表
(1)计算表的长度n。
(2)线性表是否为空
(3)将元素添加到线性表的末尾
(4)获取第i个元素,0≤i < n。
(5)清除线性表
(6)返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1。
(7)返回列表中最后一次出现指定元素的索引,如果列表不包含此元素,则返回 -1。
(8)将新元素插入第i个位置,0≤i < n,使原来的第i,i+1,…,n–1个元素变为第i+1,i+2,…,n个元素。
(9)更改第i个元素
(10)删除第i个元素,0≤i < n,使原来的第i+1,i+2,…,n–1个元素变为第i,i+1,…,n–2个元素
#include"iostream" using namespace std; struct List{ int *list; //存线性表元素的动态存储空间的指针 int size; //存线性表长度 int maxsize; //规定list数组的长度 }; void init_list(List &l) //初始化线性表 { l.maxsize=6; //初始定义数组长度 l.list=new int[l.maxsize]; //动态存储空间分配 if(l.list==NULL) { cout<<"动态可分配的存储空间已用完,退出运行!"<<endl; exit(1); } l.size=0; //置线性表长度为0,即为空表 } void clear_list(List &l) //清空线性表 { if(l.list!=NULL) { delete []l.list; l.list=NULL; } l.maxsize=0; l.size=0; } int length_list(List &l) //获取线性表的长度 { return l.size; } bool empty_list(List &l) //检查线性表是否为空 { return l.size==0; } int get_list(List &l,int pos) //获取线性表中指定位置的元素 { if(pos<1 ||pos>l.size) //若pos越界则退出 { cout<<"pos is out range!"<<endl; exit(1); } return l.list[pos-1]; //返回线性表中第pos个元素的值 } void traverse_list(List &l) //遍历线性表中的元素,若遍历记录类型,则需要重插入操作符 { for(int i=0;i<l.size;i++) { if(i!=(l.size-1)) cout<<l.list[i]<<" "; else cout<<l.list[i]<<endl; } } void findpoint_list(List &l,int item) //返回查找的位置 { for(int i=0;i<l.size;i++) { if(l.list[i]==item) { item=l.list[i]; cout<<"你查找的元素的位置序号为:"<<i+1<<endl; } } } bool insert_list(List &l,int item,int pos) //向线性表中指定的位置插入元素 { if(pos<1||pos>l.size+1) // 先检查pos的位置是否有效 cout<<"pos值无效"<<endl; int j; if(l.size<=l.maxsize) //表示线性表的存储空间已经用完了 { int k=sizeof(int); //计算每个存储空间的长度 l.list=(int *)realloc(l.list,2*l.maxsize*k); //扩展空间 if(l.list==NULL) { cout<<"动态可分配的存储空间用完"<<endl; exit(1); } l.maxsize=2*l.maxsize; } for(j=l.size-1;j>=pos-1;j--) //等插入元素的位置及所有后续元素位置都依次后移一个位置 l.list[j+1]=l.list[j]; l.list[pos-1]=item; //将等插入的元素插入已经空下的位置 l.size++; //表长度加1 return true; } bool delete_list(List &l,int pos) //从线性表中删除指定位置元素 { if(l.size==0) { cout<<"线性表为空"<<endl; return false; } if(pos<1 ||pos>l.size+1) cout<<"pos值无效"<<endl; //进行删除操作 int k=0; for(k=pos-1;k<l.size;k++) l.list[k]=l.list[k+1]; l.size--; return true; } void buffersort_list(List &l) //冒泡排序 { for(int a=0;a<l.size-1;a++) { for(int b=0;b<l.size-a-1;b++) { if(l.list[b]>l.list[b+1]) { int temp=l.list[b+1]; l.list[b+1]=l.list[b]; l.list[b]=temp; } } } } void main() { int a[6]; int i,x; cout<<"请输入线性表的6个正整数元素:"; for(int j=0;j<6;j++) cin>>a[j]; cout<<endl; List list; init_list(list); //初始化List for(i=0;i<6;i++) insert_list(list,a[i],i+1); //将数组插入到线性表中 cout<<"遍历新插入的线性表的元素:"; traverse_list(list); //遍历线性表 findpoint_list(list,11); //查找指定位置的元素 cout<<"获取指定位置的元素值为:"<<get_list(list,3)<<endl; //获取指定位置的元素值 cout<<"获取线性表的长度为:"<<length_list(list)<<endl; //获取线性表的长度 buffersort_list(list); //对线性表进行排序 cout<<"对线性表排序后的结果为:"; traverse_list(list); cout<<"删除指定Pos位置的元素:"<<delete_list(list,3)<<endl; //删除指定位置上的元素 traverse_list(list); }
线性表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。