线性表之顺序表 源代码

来源:互联网 发布:网络用语lay了什么意思 编辑:程序博客网 时间:2024/06/05 12:10

线性表概述
线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。
线性表分为静态线性表和动态线性表,常见的有顺序表(静态的)、单向链表(动态的)和双向链表(动态的)。
线性表的操作主要包括:
(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<algorithm>#include<iostream>using namespace std;struct List{int *elem;int length;int maxsize;};void Init_list(List &L) //初始化线性表 {L.maxsize=100;L.elem=new int[L.maxsize];if(L.elem==NULL) { cout<<"动态非配失败"<<endl;exit(1);  } L.length=0; }void Clear_list(List &L)//清空原始表 {if(L.elem!=NULL){delete []L.elem;L.elem=NULL;} L.length=0;L.maxsize=0;}void Locate_list(List &L,int e)//查找元素的位置 {for(int i=0;i<L.length;i++){if(L.elem[i]==e)   cout<<"您所查找元素的位置序号为"<<i+1<<endl;    }}void Traverse_list(List &L)//遍历线性表中的元素,若遍历记录类型,则需要插入操作符 {for(int i=0;i<L.length;i++){if(i!=(L.length-1))    cout<<L.elem[i]<<" ";else    cout<<L.elem[i]<<endl;}}void buffersort_list(List &L){for(int i=0;i<L.length-1;i++){for(int j=i+1;j<L.length-1;j++){if(L.elem[j]>L.elem[j+1])     {     int temp=L.elem[j];     L.elem[j]=L.elem[j+1];     L.elem[j+1]=temp;     }}}}int Length_list(List &L)//计算线性表长度 {return L.length;}bool Insert_list(List &L,int i,int e)//插入元素 {if(i<1||i>L.length+1)     cout<<"i值无效"<<endl;if(L.length==L.maxsize){     cout<<"当前存储空间已满"<<endl;      int k=sizeof(int); L.elem=(int *)realloc(L.elem,2*L.maxsize*k); if(L.elem==NULL) { cout<<"动态分配失败"<<endl; exit(1);  } L.maxsize=2*L.maxsize;     } for(int j=L.length-1;j>=i-1;j--){L.elem[j+1]=L.elem[j];} L.elem[i-1]=e;L.length++;return true;}bool Delete_list(List &L,int i) //删除指定元素 {if(L.length==0){    cout<<"线性表为空"<<endl;   return false;} if(i<1 ||i>L.length)   cout<<"输入i值无效"<<endl;   int e=L.elem[i-1];for(int j=i;j<L.length;j++){L.elem[j-1]=L.elem[j];} L.length--;return true; }int main(){int a[10]={0};int i;cout<<"请输入线性表的10个正整数元素:";for(int i=0;i<10;i++)    {    cin>>a[i];    }    cout<<endl;    List list;    Init_list(list);   //初始化线性表     for(i=0;i<10;i++)    Insert_list(list,i+1,a[i]);    cout<<"遍历新插入的线性表的元素:";Traverse_list(list);     Locate_list(list,10);    cout<<"该线性表的长度为"<<Length_list(list)<<endl;    //sort(L.list,L.list+L.length); buffersort_list(list);    cout<<"对该线性表进行升序排列为:";    Traverse_list(list);cout<<"删除指定位置的元素为"<<Delete_list(list,5)<<endl;Traverse_list(list);return 0;} 


0 0