线性表

来源:互联网 发布:尔雅网络课程登陆 编辑:程序博客网 时间:2024/05/18 00:06
#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]<<" ";elsecout<<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++;              //表长度加1return 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);     //初始化Listfor(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); }

原创粉丝点击