顺序表
顺序表有两种分配空间方法。
第一,静态分配(因为分配了固定的空间,有时候会出现溢出问题。)
第二,动态分配(如果发生溢出问题,可以另外开辟一块空间)
静态分配
typedef struct{
int data[100];
int length;//顺序表的长度
}SqList;
动态分配
typedef struct{
int *elem;
int length;//顺序表的长度
}SqList;
顺序表的基本操作
初始化
代码实现:
void InitList(SqList &L){//构造一个空的顺序表L
L.elem=new int[100];//为顺序表动态分配100个空间
L.length=0;//顺序表长度为0
}
创建
代码实现:
void CreateList(SqList &L){//创建一个顺序表L
cout << "请输入元素个数:";
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> L.elem[i];//输入数据元素
L.length++;//顺序表长度加1
}
}
例子:
/* 为一个空的顺序表创建5个元素
分别为:1、2、3、4、5
并输出到屏幕上
*/
#include<iostream>
using namespace std;
typedef struct{
int *elem;
int length;//顺序表的长度
}SqList;
void InitList(SqList &L){//构造一个空的顺序表L
L.elem=new int[100];//为顺序表动态分配100个空间
L.length=0;//顺序表长度为0
}
void CreateList(SqList &L){//创建一个顺序表L
cout << "请输入元素个数:";
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> L.elem[i];//输入数据元素
L.length++;//顺序表长度加1
}
}
void PrintList(SqList L){//打印顺序表
for(int i=0;i<L.length;i++){
cout << L.elem[i] << " ";
}
}
int main(){
SqList L;
InitList(L);
CreateList(L);
PrintList(L);
}
运行结果:
取值
代码实现:
void GetElem(SqList L){
int i;
cout << endl << "要取第几个元素:";
cin >> i;
cout << "第" << i << "个元素是" << L.elem[i-1] << endl;//第i-1个单元存储着第i个数据
}
例子:
/* 为一个空的顺序表创建5个元素
分别为:1、2、3、4、5
并输出到屏幕上
输出第i个元素
*/
#include<iostream>
using namespace std;
typedef struct{
int *elem;
int length;//顺序表的长度
}SqList;
void InitList(SqList &L){//构造一个空的顺序表L
L.elem=new int[100];//为顺序表动态分配100个空间
L.length=0;//顺序表长度为0
}
void CreateList(SqList &L){//创建一个顺序表L
cout << "请输入元素个数:";
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> L.elem[i];//输入数据元素
L.length++;//顺序表长度加1
}
}
void GetElem(SqList L){
int i;
cout << endl << "要取第几个元素:";
cin >> i;
cout << "第" << i << "个元素是" << L.elem[i-1] << endl;//第i-1个单元存储着第i个数据
}
void PrintList(SqList L){//打印顺序表
for(int i=0;i<L.length;i++){
cout << L.elem[i] << " ";
}
}
int main(){
SqList L;
InitList(L);
CreateList(L);
PrintList(L);
GetElem(L);
}
运行结果:
查找
代码实现:
int LocateElem(SqList L){
int i,e;
cout << endl << "请输入要查找的元素:";
cin >> e;
for(i=0;i<L.length;i++){
if(e==L.elem[i])
return i+1;//下标为i,实际为i+1个元素
}
}
例子:
/* 为一个空的顺序表创建5个元素
分别为:1、2、3、4、5
并输出到屏幕上
输入要查找的元素3
输出元素位置
*/
#include<iostream>
using namespace std;
typedef struct{
int *elem;
int length;//顺序表的长度
}SqList;
void InitList(SqList &L){//构造一个空的顺序表L
L.elem=new int[100];//为顺序表动态分配100个空间
L.length=0;//顺序表长度为0
}
void CreateList(SqList &L){//创建一个顺序表L
cout << "请输入元素个数:";
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> L.elem[i];//输入数据元素
L.length++;//顺序表长度加1
}
}
int LocateElem(SqList L){
int i,e;
cout << endl << "请输入要查找的元素:";
cin >> e;
for(i=0;i<L.length;i++){
if(e==L.elem[i])
return i+1;//下标为i,实际为i+1个元素
}
}
void PrintList(SqList L){//打印顺序表
for(int i=0;i<L.length;i++){
cout << L.elem[i] << " ";
}
}
int main(){
SqList L;
InitList(L);
CreateList(L);
PrintList(L);
cout << LocateElem(L);
}
运行结果: