掌握顺序表的初始化,初始化、查找、插入、删除、遍历、查看实际长度等操作
内容
- 从键盘输入n个整数,创建顺序表。【创建长度为n的顺序表】
- 从键盘输入1个整数x,在顺序表中查找x所在的位置。若找到,输出该元素所在的位置(即数组下标);若找不到,则显示“找不到”。【按值查找】
- 从键盘输入2个整数x、i,将元素x插入到第i个元素处,插入操作结束后遍历顺序表,观察输出结果。【插入】【遍历】
- 从键盘输入1个整数i,表示删除第i个元素,删除操作结束后遍历顺序表,观察输出结果。【删除】
- 从键盘输入1个整数x,删除找到的第一个值等于x的元素,删除操作结束后遍历顺序表,观察输出结果。【按值查找】【删除】
- 查看当前顺序表的长度。【求顺序表的长度】
完整代码
#include<iostream>
#include <stdlib.h>
using namespace std;
#define MAX 20
#define datatype int
typedef struct seqList
{
datatype data[MAX];
int last;
}SeqList;
//初始化
SeqList *Init()
{
SeqList *L;
L=(SeqList *)malloc(sizeof(SeqList));
L->last=-1;
return L;
}
//添加
void Add(SeqList *L)
{
int a;
cout<<"请输入需要添加的个数:" ;
cin>> a;
datatype arr[a];//保存要添加的值
cout<<"请输入需要添加的值:" ;
for(int i=0;i<a;i++)
{
cin>>arr[i];
}
for(int i=0;i<a;i++)
{
L->data[i]=arr[i];
L->last++;
//cout<<L->data[i];
}
}
//显示,遍历
void Output(SeqList *L)
{
if(L->last!=-1)
{cout<<"遍历:"<<endl;
for(int i=0;i<=L->last;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl;
}
else cout<<"空表,无数据!";
}
//插入
int Insert(SeqList *L)
{
int i;
datatype x;
cout<<"输入x,i,元素x插入到第i个元素处: ";
cin>>x>>i;
int j;
if(L->last==MAX-1)
{
cout<<"表满";
return (-1);
}
if(i<1||i>L->last+2)
{
cout<<"位置错";
return (0);
}
for(j=L->last;j>=i-1;j--)
{
L->data[j+1]=L->data[j];//节点移动,没有这行会越界,之前位置的节点会消失
}
L->data[i-1]=x;
L->last++;
return(1);
}
//删除
int Delete(SeqList *L)
{int i;
cout<<"输入i,删除第i个元素:";
cin>>i;
int j;
if(i<1||i>L->last+1)
{
cout<<"不存在第i个元素";
return (0);
}
for(j=i;j<=L->last;j++)
{
L->data[j-1]=L->data[j];//移动
}
L->last--;
return (1);
}
//查找删除
int Location_dete(SeqList *L)
{datatype x;
int i=0;
cout<<"输入x,删除第一个值为x的元素:";
cin>>x;
while(i<=L->last&&L->data[i]!=x)
{
i++;
if(i<=L->last&&L->data[i]==x)
{
for(i;i<=L->last;i++)
{
L->data[i]=L->data[i+1];
}
L->last--;
return (1);
}
else if(i>L->last)//最好加条件,不然删除最后一个的时候会找不到直接跳进这个里
{
cout<<"没有此元素!"<<endl;
return (-1);
}
}
}
void Length(SeqList *L)
{
cout << "顺序表的长度为:"<<L->last+1;//下标从0开始所以要加1
}
int main()
{
SeqList *LA;
LA=Init();
Add(LA);
Output(LA);
Insert(LA);
Output(LA);
Delete(LA);
Output(LA);
Location_dete(LA);
Output(LA);
Length(LA);
return 0;
}
运行结果