C++实现顺序表的各种基本运算

领会顺序表存储结构和掌握顺序表中的各种基本运算算法设计

实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型 ElemType 为 char)

程序要求:

1.初始化顺序表L;

2.依次插入A、B、C、D、E元素;

3.输出顺序表L;

4.判断顺序表L的长度;

5.判断顺序表L是否为空表;

6.根据用户的输入的位置,输出相应顺序表L的元素;

7.根据用户的输入的元素,输出相应顺序表L元素的位置;

8.根据用户的输入的位置和元素,对顺序表L插入新的元素;

9.输出顺序表L;

10.根据用户的输入的位置,删除顺序表L中对应的元素;

11.输出顺序表L;

12.释放顺序表L;

-------------------------------------------------------------------------------------------------------------------

注意:

1.ElemType e 与 ElemType &e的区别

2.注意逻辑序号和物理序号的转换

----------------------------------------------------------------------------------------------

定义线性表的结构体类型

#include <iostream.h>
#define MaxSize 100
typedef char ElemType;

typedef struct 
{
	ElemType data[MaxSize];
   	int length;
} SqList;   //定义线性表结构体类型 

1.初始化线性表函数

//初始化线性表
void InitList(SqList *&L)   //引用型指针
{
	L= new SqList;       /*分配存放线性表的空间*/
    L->length=0;
}

2.建立线性表函数

//建立线性表
void CreateList(SqList *&L,ElemType a[],int n)  
{
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}

3.销毁线性表函数

//销毁线性表
void DestroyList(SqList *&L)
{
	delete L;
}

4.判定线性表是否为空表函数 

如果线性表为空表 return true

如果线性表不为空表 return false

//判定是否为空表
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}

5.求线性表的长度函数

//求线性表的长度
int ListLength(SqList *L)
{
	return(L->length);
}

6.输出线性表函数

void DispList(SqList *L)
{
	if (ListEmpty(L))
		return;
	for (int i=0;i<L->length;i++)
		cout<<L->data[i]<<"   ";
	cout<<endl;
} 

7.求某个数据元素值

此时 i 为逻辑序号

通过 i-1 转化为物理序号

//求某个数据元素值
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length) 
		return false;
	e=L->data[i-1];
	return true;
}

8.按元素值查找

//按元素值查找
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (i<L->length && L->data[i]!=e) 
		i++;
	if (i>=L->length)
		return 0;
	else 
		return i+1;
}

9.插入数据元素

//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e)
{
    if (i<1 || i>L->length+1)
		return false;
    i--;  /*将顺序表逻辑位序转化为elem下标即物理位序*/
    for (int j=L->length;j>i;j--)/*将data[i]及后面元素后移一个位置*/
		L->data[j]=L->data[j-1];
                
	L->data[i]=e;   //将新元素插入该位置
	L->length++;      /*顺序表长度增1*/
	return true;
}

10.删除数据元素

//删除数据元素
bool ListDelete(SqList *&L,int i,ElemType &e)
{
     int j;
     if (i<1 || i>L->length)
		 return false;
     i--;	   /*将顺序表逻辑位序转化为elem下标即物理位序*/
     e=L->data[i];
     for (j=i;j<L->length-1;j++) L->data[j]=L->data[j+1];
            /*将data[i]之后的元素前移一个位置*/
     L->length--;	/*顺序表长度减1*/
     return true;
}

----------------------------------------------------------------------------------------------

主函数

建表使用 ListInsert 函数 或者 CreateList 函数都可以

void main()
{
	SqList *L1;
	cout<<"1.初始化顺序表:"<<endl;InitList(L1);

	cout<<"\n2.尾插法建表:"<<endl;
	ElemType a[5]={'A','B','C','D','E'};
    for(int i=0;i<5;i++)
		if(!ListInsert(L1,i+1,a[i]))
			cout<<"插入失败!";
	cout<<"\n3.顺序表的元素为:";
	DispList(L1);


	cout<<"\n4.该顺序表的长度为:"<<ListLength(L1)<<endl;

	cout<<"\n5.该顺序表";
	if(ListEmpty(L1))
		cout<<"为空!"<<endl;
	else
		cout<<"不为空!"<<endl;


	cout<<"\n6.取元素";
	ElemType temp;cout<<"请输入取的位置:";int k;cin>>k;
	if(GetElem(L1,k,temp))
		cout<<"取值成功,该顺序表的第"<<k<<"个元素的值为:"<<temp<<endl;
	else
		cout<<"取值失败,你输入的位置"<<k<<"越界:"<<endl;

  
	cout<<"\n7.查找元素:"<<endl<<"请输入查找元素的值:";cin>>temp;
	if(LocateElem(L1,temp))
		cout<<"输出元素'"<<temp<<"'的位置为:"<<LocateElem(L1,temp)<<endl;
	else
		cout<<"元素'"<<temp<<"'不存在."<<endl;
  
	cout<<"\n8.在顺序表指定位置插入元素 :"<<endl;
	cout<<"请输入插入的位置:";cin>>k;
	cout<<"请输入插入元素的值:";cin>>temp;

	if(ListInsert(L1,k,temp))
		cout<<"插入成功"<<endl;
	else
		cout<<"插入失败!"<<endl;

	cout<<"\n9.输出顺序表"<<endl;
	DispList(L1);
	
	cout<<"\n10.删除顺序表指定位置的元素"<<endl;
	cout<<"请输入删除的位置:";cin>>k;
	if(ListDelete(L1,k,temp))
		cout<<"删除成功,删除的元素为:"<<temp<<endl;
	else
		cout<<"删除失败!"<<endl;

	cout<<"\n11.输出顺序表"<<endl;
	DispList(L1);
	cout<<"\n12.释放顺序表"<<endl;
	DestroyList(L1);

}

猜你喜欢

转载自blog.csdn.net/henry594xiaoli/article/details/123619337
今日推荐