#include<iostream> //c++头文件
using namespace std;
#define LIST_INIT_SIZE 20 //预定义常量
#define LISTINCREMENT 5
#define OK 1
#define ERROR 0
typedef int ElemType; //定义类型
typedef int Status;
typedef struct //线性表结构体定义
{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList &L) //创建空的线性表
{
L.elem=new ElemType[LIST_INIT_SIZE]; //申请空间
L.length=0; //令表中数据长度为零
L.listsize=LIST_INIT_SIZE; //将所申请的空间给予元素空间
return OK;
}
Status CreateList_Sq(SqList &L,int n) //创建一个线性表
{
int i;
InitList_Sq(L); //创建空表
if(n>L.listsize) //保证空间足够
{
//续开辟空间
}
L.length=n;
cout<<"please input "<<n<<" numbers:";
for(i=0;i<L.length;i++) //输入数据元素
cin>>L.elem[i];
return OK;
}
Status OutputList_Sq(SqList L) //输出线性表
{
int i;
cout<<"The list is:";
for(i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl;
return OK;
}
Status ListInsert_Sq(SqList &L,int i,ElemType e) //插入元素(前插法)
{
int j;
if(i<1||i>L.length+1) // (1)判断插入元素下标i的合法性(1---L.length+1)
return ERROR;
if(L.length>=L.listsize) //判断空间是否够用
{
//续开辟空间
}
for(j=L.length-1;j>=i-1;j--) // (2) 下标L.length-1----i-1的元素,后移一个位置
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e; // (3) 插入e(下标i-1)
L.length++; // (4) 数据元素长度加一
return OK;
}
Status ListDelete_Sq(SqList &L,int i,ElemType &e) //删除元素,并用e返回该数据
{
int *p,*q;
if(i<1||i>L.length) // (1) 判断插入元素下标i的合法性(1---L.length+1)
return ERROR;
p=&(L.elem[i-1]); // (2) 取第i个元素的地址,并用e取其中数据
e=*p;
q=L.elem+L.length-1; //最后(表尾)元素的位置
for(++p;p<=q;++p)
*(p-1)=*p; // (3) 元素依次左移
--L.length; // (4) 元素长度减一
return e;
}
Status ListLength_Sq(SqList &L) //求元素长度
{
int i,p=0;
for(i=0;i<L.length;i++)
if(L.elem[i]!='\0')
p=p+1;
cout<<"The length is "<<p<<"\n";
return OK;
}
Status PriorElem_Sq(SqList &L,int cur_e,ElemType &pre_e) // 求第cur_e个数据元素的前驱,用pre_e返回
{
int i,*p=0;
for(i=0;i<L.length;i++)
{
if(cur_e==1) //首个元素无前驱
{
cout<<"不存在前驱 "<<endl;
break;
}
else if(L.elem[i]==L.elem[cur_e-1])
{
p=&(L.elem[i-1]);
pre_e=*p;
cout<<"该数前驱为 "<<pre_e<<"\n";
}
}
return OK;
}
Status NextElem_Sq(SqList &L,int cur_e,ElemType &next_e) //求第cur_e个数据元素的后继,用next_e返回
{
int i,*p=0;
for (i=0;i<L.length;i++){
if(cur_e==L.length) //最后一个元素无后继
{
cout<<"不存在后继 "<<endl;
break;
}
else if(L.elem[i]==L.elem[cur_e-1])
{
p=&(L.elem[i+1]);
next_e=*p;
cout<<"该数后继为 "<<next_e<<"\n";
}
}
return OK;
}
Status GetElem(SqList L,int i,ElemType &e) //获取第i个元素
{
int *p=0;
if(i<1||i>L.length)
return ERROR;
else{
p=&(L.elem[i-1]);
e=*p;
}
return e;
}
Status DestroyList(SqList &L) //销毁线性表
{
free(L.elem); //释放空间
L.elem=NULL;
L.length=0;
L.listsize=0;
cout<< "线性表已销毁! "<<endl;
return OK;
}
Status equal(SqList L,int c1,int c2) //比较两个元素是否相等
{
if(L.elem[c1]==L.elem[c2])
cout<<"相等"<<endl;
else
cout<<"不相等"<<endl;
return OK;
}
int main()
{
SqList L1;
ElemType e;
ElemType pre_e,next_e;
CreateList_Sq(L1,5); //创建线性表
ListInsert_Sq(L1,3,0); // 在第三个元素插入
cout<<"插入后的线性表:"<<endl;
OutputList_Sq(L1);
cout<<"删除的元素为"<<ListDelete_Sq(L1,3,e)<<endl; //删除第三个元素
OutputList_Sq(L1);
cout<<"第三个元素为"<<GetElem(L1,3,e)<<endl; //获取第三个元素
PriorElem_Sq(L1,3,pre_e); //求第三个元素的前驱
NextElem_Sq(L1,3,next_e); //求第三个元素的后继
cout<<"判断第二第三个元素是否相等"<<endl; //判断元素是否相等
equal( L1, 2, 3);
ListLength_Sq(L1); //求线性表的长度
DestroyList(L1); //销毁线性表
return 1;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。