顺序表的定义 :数据结构在内存中的表示通常有两种形式,即顺序储存表示和链式储存表示。线性表的顺序储存是指用一组地址连续的储存单元依次储存线性表的数据元素,我们把这种储存形式储存的线性表叫做顺序储存。线性表的顺序储存表示又叫做顺序表.
顺序表的实现 :
- 顺序表的类型定义:
#define MAXLEN 100 typedef int datetype; typedef struct { datetype date[MAXLEN]; int length; }SeqList;
- 顺序表的初始化:
void InitList(SeqList *L)//初始化顺序表L函数 { L->length=0; }
- 顺序表的建立:
void SetList(SeqList *L,int n)//建立顺序表并输入多个元素函数 { int i; cout<<"请输入"<<n<<"个整数"<<endl; for(i=0;i<n;i++) { cin>>L->date[i]; } L->length=n; }
- 查找操作:
void Getdate(SeqList *L,int x)//在顺序表中定位元素x的函数 { int flag=0; if(L->length<=0) cout<<"顺序表为空"<<endl; else for(int i=0;i<L->length;i++) { if(x==L->date[i]) { cout<<"顺序表中第"<<i+1<<"个位置元素值为"<<x<<endl; flag=1; } } if(!flag) cout<<"在顺序表中未找到值为"<<x<<"的元素"<<endl; }
- 插入操作:
int InsList(SeqList *L,int k,int x)//在顺序表中第k位插入新元素x的函数 { int i; if(L->length==MAXLEN) { cout<<"顺序表已满"<<endl; return -1; } if(k<=0||k>L->length+1) { cout<<"插入位置错误"<<endl; return 0; } if(k==L->length) { L->date[k]=x; L->length++; return 1; } for(i=L->length-1;i>=k-1;i--) L->date[i+1]=L->date[i]; L->date[k-1]=x; L->length++; return 1; }
- 删除操作:
int Deldate(SeqList *L,int k)//在顺序表中删除第k位元素的函数 { int i,j; if(L->length<=0) { cout<<"顺序表为空!"<<endl; return 0; } if(k<=0||k>L->length) { cout<<"删除位置不存在"<<endl; return 0; } j=L->date[k-1]; for(i=k;i<L->length;i++) { L->date[i-1]=L->date[i]; } cout<<"删除元素为:"<<j<<endl; L->length--; return 1; }
- 输出表中元素:
void PriList(SeqList *L)//显示输出顺序表中的元素 { int i; for(i=0;i<L->length;i++) cout<<L->date[i]<<" "; cout<<endl; }
-
显示菜单函数:
void Menu()//显示菜单子函数 { cout<<endl<<" "<<"顺序表的各种操作"; cout<<endl<<"********************************************"; cout<<endl<<"| 1.建立顺序表 |"; cout<<endl<<"| 2.插入元素 |"; cout<<endl<<"| 3.删除元素 |"; cout<<endl<<"| 4.查找元素 |"; cout<<endl<<"| 5.求顺序表的长度 |"; cout<<endl<<"| 0.返回 |"; cout<<endl<<"********************************************"; cout<<endl<<" 请输入菜单号(0—5): "<<endl; }
总代码:
#include <iostream>
#define MAXLEN 100
using namespace std;
typedef int datetype;
typedef struct
{
datetype date[MAXLEN];
int length;
}SeqList;
//顺序表的初始化
void InitList(SeqList *L)//初始化顺序表L函数
{
L->length=0;
}
//顺序表的建立
void SetList(SeqList *L,int n)//建立顺序表并输入多个元素函数
{
int i;
cout<<"请输入"<<n<<"个整数"<<endl;
for(i=0;i<n;i++)
{
cin>>L->date[i];
}
L->length=n;
}
//查找操作
void Getdate(SeqList *L,int x)//在顺序表中定位元素x的函数
{
int flag=0;
if(L->length<=0) cout<<"顺序表为空"<<endl;
else
for(int i=0;i<L->length;i++)
{
if(x==L->date[i])
{
cout<<"顺序表中第"<<i+1<<"个位置元素值为"<<x<<endl;
flag=1;
}
}
if(!flag) cout<<"在顺序表中未找到值为"<<x<<"的元素"<<endl;
}
//插入操作
int InsList(SeqList *L,int k,int x)//在顺序表中第k位插入新元素x的函数
{
int i;
if(L->length==MAXLEN)
{
cout<<"顺序表已满"<<endl;
return -1;
}
if(k<=0||k>L->length+1)
{
cout<<"插入位置错误"<<endl;
return 0;
}
if(k==L->length)
{
L->date[k]=x;
L->length++;
return 1;
}
for(i=L->length-1;i>=k-1;i--)
L->date[i+1]=L->date[i];
L->date[k-1]=x;
L->length++;
return 1;
}
//删除操作
int Deldate(SeqList *L,int k)//在顺序表中删除第k位元素的函数
{
int i,j;
if(L->length<=0)
{
cout<<"顺序表为空!"<<endl;
return 0;
}
if(k<=0||k>L->length)
{
cout<<"删除位置不存在"<<endl;
return 0;
}
j=L->date[k-1];
for(i=k;i<L->length;i++)
{
L->date[i-1]=L->date[i];
}
cout<<"删除元素为:"<<j<<endl;
L->length--;
return 1;
}
//输出表中元素
void PriList(SeqList *L)//显示输出顺序表中的元素
{
int i;
for(i=0;i<L->length;i++)
cout<<L->date[i]<<" ";
cout<<endl;
}
void Menu()//显示菜单子函数
{
cout<<endl<<" "<<"顺序表的各种操作";
cout<<endl<<"********************************************";
cout<<endl<<"| 1.建立顺序表 |";
cout<<endl<<"| 2.插入元素 |";
cout<<endl<<"| 3.删除元素 |";
cout<<endl<<"| 4.查找元素 |";
cout<<endl<<"| 5.求顺序表的长度 |";
cout<<endl<<"| 0.返回 |";
cout<<endl<<"********************************************";
cout<<endl<<" 请输入菜单号(0—5): "<<endl;
}
int main()
{
SeqList L;
datetype x;
int i,j,k,p=1,n;
L.length=0;
while(p!=0)
{
Menu();
cin>>p;
switch(p)
{
case 1:
InitList(&L);
cout<<"请输入要加入元素的个数:"<<endl;
cin>>n;
SetList(&L,n);
cout<<"建立的线性表为:"<<endl;
PriList(&L);
break;
case 2:
cout<<"请输入要插入的位置:"<<endl;
cin>>k;
cout<<"请输入要插入的元素:"<<endl;
cin>>x;
if(InsList(&L,k,x))
{
cout<<"在第"<<k<<"个位置插入的数据为"<<x<<"插入后的顺序表为:"<<endl;
PriList(&L);
}
else
{
cout<<"输入的数据有误!"<<endl;
}
break;
case 3:
cout<<"输入要删除的元素的位置:"<<endl;
cin>>x;
if(Deldate(&L,x));
{
if(L.length>0)
{
cout<<"删除指定元素后的顺序表为:"<<endl;
PriList(&L);
}
else
cout<<"删除指定元素后的顺序表为空!"<<endl;
}
break;
case 4:
cout<<"输入你要查找的元素:"<<endl;
cin>>x;
Getdate(&L,x);
break;
case 5:
cout<<"顺序表的长度为:"<<L.length<<endl;
break;
case 0:
cout<<"退出!"<<endl;
p=0;
break;
default :
cout<<"输入有误,请在0~5之间输入!";
}
}
}