掌握顺序表的初始化,初始化、查找、插入、删除、遍历、查看实际长度等操作
内容
- 从键盘输入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 inttypedef 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;
}
运行结果