目录
一、结构体的一般形式
#define N 100
struct seqlist
{
int a[N];
int size;//表示数组中存储了多少个有效数据
};
void seqlist1(struct seqlist*ps,int x);//定义一个seqlist1函数,其作用是往顺序表中插入数据
二、一般形式的顺序表
第一步: 现在整个顺序表存放的是int类型的数据,如果需要存放double类型的数据需要将顺序表中所有的int改成double
struct seqlist
{
double a[N];
int size;//表示数组中存储了多少个有效数据
};
void seqlist1(struct seqlist*ps,double x);
第二步:那么想要存放某一个未知类型的数据,可以利用typedef,之后如果想存放double类型的数据,只需要将typedef int M改成typedef double M。
typedef int M
struct seqlist
{
M a[N];
int size;//表示数组中存储了多少个有效数据
};
void seqlist1(struct seqlist*ps,M x);
第三步:struct seqlist太长了,也可以利用typedef
typedef int M
typedef struct seqlist
{
M a[N];
int size;//表示数组中存储了多少个有效数据
}SL;
void seqlist1(SL*ps,M x);
三、静态顺序表和动态顺序表
1.静态顺序表:使用定长的数组存储元素
typedef int M
typedef struct seqlist
{
M a[N];
int size;//表示数组中存储了多少个有效数据
}SL;
2.动态顺序表:使用动态开辟的数组存储
typedef int M
typedef struct seqlist
{
M *array;//指向动态开辟的数组
M size;//有效数组个数
M capicity;//容量空间的大小
}
四、容易混淆的点
typedef int M
typedef struct seqlist
{
M a[N];
int size;//表示数组中存储了多少个有效数据
}SL;
//接口函数
void seqlistinit(SL*ps)//初始化函数
void seqlistpushback(struct seqlust*ps,int i)//插入函数===>void seqlistpushback(SL*ps,M i)
//先定义初始化函数
void seqlistinit(SL*ps)
{
ps->size=0;//ps指向结构体变量s1的地址,通过箭头访问结构体变量s1里面的成员变量size
//将size初始化为0
}
void Textseqlist1()
{
SL s1;//第二步定义一个结构体变量s1,SL s1等价于struct seqlist s1,s1具有数组a和整型size
seqlistinit(&s1) ;//然后调用seqlistinit函数,将s1的地址传给ps
}
int mian()
{
Textseqlist();//第一步先调用Textseqlist函数
return 0;
}
五、顺序表的基本操作
#include<iostream>
#define N 100
int number;
using namespace std;
typedef struct seqlist
{
int a[N];
int size;//表示数组中存放了多少个有效数据
int maxsize;//最大容量
}SL;
void seqlistinit(SL*ps)//初始化函数
{
ps->size=0;
ps->maxsize=N;
}
void Length(SL*ps)//求顺序表的长度
{
cout<<ps->size<<endl;
}
void displist(SL*ps)//顺序表的录入
{
cout<<"请输入准备录入的数据个数:";
cin>>ps->size;
cout<<"请依次输入数据:" ;
int i=0;
while(i<ps->size)
{
cin>>ps->a[i];
i++;
}
}
int locate(SL*ps)//按位查找
{
cout<<"请输入想要查找的顺序表的第几个数据:";
int i;
cin>>i;
cout<<ps->a[i-1]<<endl;
}
int locate2(SL*ps)//按值查找
{
cout<<"请输入想要查找的数据:";
int i;
cin>>i;
int j=0;
while(j<ps->size)
{
if((ps->a[j])==i)
{
cout<<"查找成功!"<<endl;
return 0;
}
j++;
}
cout<<"输入有误!";
}
int insert(SL*ps)//插入数据
{
cout<<"请分别输入想要插入的一个数据和位置:";
int m,key,i;
cin>>m>>key;
if(key<1||key>(ps->size)+1||ps->size>ps->maxsize)
{
cout<<"输入有误!";
return 0;
}
else
{
for(int i=ps->size;i>=key;i--)
{
ps->a[i]=ps->a[i-1];
}
ps->a[key-1]=m;
(ps->size)++;
cout<<"插入成功!"<<endl;
return 0;
}
}
void print(SL*ps)//遍历
{
int i;
for(i=0;i<ps->size;i++)
{
cout<<ps->a[i]<<" ";
}
cout<<endl;
}
int del(SL*ps)//删除
{
cout<<"请分别输入想要删除数据的位置:";
int key,m;
cin>>key;
if(key<1||key>(ps->size)+1)
{
cout<<"输入有误"<<endl;
return 0;
}
m=ps->a[key-1];
for(int i=key;i<ps->size;i++)
{
ps->a[i-1]=ps->a[i];
}
(ps->size)--;
cout<<"删除成功!";
}
void menu() //显示菜单
{
printf("\n");
cout<<"-------------------------------------------------欢迎使用该系统-------------------------------------------------" <<endl;
cout<<" 1、录入数据 "<<endl;
cout<<" 2、遍历顺序表 "<<endl;
cout<<" 3、插入数据 "<<endl;
cout<<" 4、按位置查找数据 "<<endl;
cout<<" 5、按值查找数据 "<<endl;
cout<<" 6、求顺序表的长度 "<<endl;
cout<<" 7、删除数据 "<<endl;
cout<<" 8、退出系统 "<<endl;
}
int main()
{
SL s1;
seqlistinit(&s1);
while(1)
{
menu();
cout<<"请输入菜单编号:";
cin>>number;
switch(number)
{
case 1:displist(&s1);break;
case 2:print(&s1);break;
case 3:insert(&s1);break;
case 4:locate(&s1);break;
case 5:locate2(&s1);break;
case 6:Length(&s1);break;
case 7:del(&s1);break;
case 8:exit(0); break; //退出
default:printf("输入有误!");
}
}
}