实验一:线性表的基本操作
【实验目的】
学习掌握线性表的顺序存储结构的设计与操作。对顺序表建立、插入、删除、查找的基本操作算法。
【实验内容】
- 建立5个元素的顺序表,如s=sqlist[]={1,2,3,4,5},实现顺序表建立的基本操作。
- 在sqlist []={1,2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
- 在sqlist []={1,2,3,4,9,5}中删除指定位置(i=5)上的元素9,实现顺序表的删除的基本操作。
- 输出顺序表中的所有元素。
- 在顺序表中查找任一元素。
【源代码】
#include <stdio.h>
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#define MAXSIZE 100 //最大长度
typedef struct {
ElemType *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
Status InitList(SqList &L)
{ //构造一个空的线性表L
L.elem=new ElemType [MAXSIZE];
//为线性表动态分配存储空间
if(!L.elem) exit(OVERFLOW); //检验是否分配成功
L.length=0;
return OK;
}//InitList_Sq
Status CreateSqList(SqList &L,int n)
{
for(int i=0;i<n;i++)
cin>>L.elem[i];
L.length=n;
return OK;
}
void TraverList(SqList L)
{
printf("\n顺序表中的元素为:");
for(int i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl;
}
int LocateElem(SqList L,ElemType e)
{ //在线性表L中查找值为e的数据元素,返回其序号
for (int i=0;i< L.length;i++)
if (L.elem[i]==e) return i+1; //查找成功,返回序号i+1
return 0; //查找失败,返回0
}
Status ListInsert(SqList &L,int i ,ElemType e){
if(i<1 || i>L.length+1) return ERROR; //i值不合法
if(L.length==MAXSIZE) return ERROR; //当前存储空间已满
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长增1
return OK;
}
Status ListDelete(SqList &L,int i)
{
if((i<1)||(i>L.length)) return ERROR; //i值不合法
for (int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; //表长减1
return OK;
}
void menu()
{
cout<<"****************************"<<endl;
cout<<" 0:退出"<<endl;
cout<<" 1:初始化"<<endl;
cout<<" 2:建表"<<endl;
cout<<" 3:遍历"<<endl;
cout<<" 4:按值查找元素"<<endl;
cout<<" 5:插入元素;"<<endl;
cout<<" 6:删除元素;"<<endl;
cout<<"****************************"<<endl;
}
int main()
{
SqList L;
int choose,i,e,n;
menu();
while(1)
{
cout<<"选择要执行的基本操作:";
cin>>choose;
switch(choose)
{
case 1:
InitList(L);
break;
case 2:
cout<<"输入表中元素个数:";
cin>>n;
CreateSqList(L,n);
break;
case 3:
TraverList(L);
break;
case 4:
cout<<"输入要查找元素的值:"<<endl;
scanf("%d",&e);
if(LocateElem(L,e))
cout<<"该元素的位置是第"<<LocateElem(L,e)<<"位。"<<endl;
else
cout<<"该元素不存在!"<<endl;
break;
case 5:
cout<<"输入要插入元素的位置和值:"<<endl;
cin>>i>>e;
if (ListInsert(L,i,e)==OK)
TraverList(L);
else
cout<<"不能插入!"<<endl;
break;
case 6:
cout<<"输入要删除元素的位置:"<<endl;
cin>>i;
if(ListDelete(L,i)==OK)
TraverList(L);
else
cout<<"删除位置不合法。"<<endl;
break;
case 0:
cout<<"操作结束!"<<endl;
exit(0);
}
}
return 0;
}
【程序运行结果】