线性表是一种最简单的线性结构。
线性表:n个类型相同的元素的有限集合。(每个数据之间存在着唯一的顺序关系)
线性表有两种存储结构:顺序存储结构和链式存储结构。
1.线性表的定义:
#include<iostream>
#include<cstdlib>
//#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
//const int MAXSIZE=(100);
<pre name="code" class="cpp">void Initlist(Sqlist &l); //初始化线性表;
void Createlist(Sqlist &l); //创建线性表
bool Isempty(Sqlist l); //判断线性表是否为空
void Insert_elem(Sqlist &l,int i,int e); //在线性表的第i个位置插入元素es
void Delete_elem(Sqlist &l,int i,int *e); //在线性表的第i个位置删除元素e
void Clearlist(Sqlist &l); //清空线性表中元素
int Length(Sqlist l); //求线性表的长度
int Getelem(Sqlist l,int i); //求线性表第i个位置的元素
void Locatedelem(Sqlist l,int e,int *i); //求元素e在线性表中的位置
typedef struct node{int *data;//储存空间基地址int length;//当前表长}Sqlist;
2.初始化线性表:
//初始化线性表
void Initlist(Sqlist &l) {
//将线性表的表长置为0
l.data=(int *)malloc(sizeof(int));
if(!l.data) exit (-2); //储存空间分配失败
l.length=0; //将线性表的表长置为0
}
3.创建线性表:
//创建线性表
void Create(Sqlist &l) {
//创建线性表
int data;
cin>>data;
int i=0;
while (data!=-1) {
l.data[i]=data;
cin>>data;
i++;
}
l.length=i;
}
4.判断线性表是否为空:
//判断线性表是否为空
bool Isempty(Sqlist l) {
//表长是否=0
if(l.length==0) return true;
else return false;
}
5.判断线性表是否为满
//判断线性表是否为满
bool Isfull(Sqlist l) {
//l.length>=MAXSIZE;
if(l.length>=MAXSIZE) return true;
else return true;
}
//求线性表第i个位置的元素
int Getelem(Sqlist l,int i) {
//第i个位置的元素=data[i-1]
//判断i是否合法
int e;
if(i<1 || i>l.length) exit(-2);
return e=l.data[i--];
}
7.//求元素e在线性表中的位置
//求元素e在线性表中的位置
int Locatedelem(Sqlist l,int e) {
//data[i]==e,是第i+1个位置
for(int i=0;i<l.length;i++) {
if(l.data[i+1]==0)
return i;
}
return -1; //没有找到
}
8.在线性表的第i个位置插入元素e
//在线性表的第i个位置插入元素e
void Insert_elem(Sqlist &l,int i,int e) {
//data[i-1]=e,
//从表尾到位置i的元素位置+1
//判断i是否合法
//判断线性表是否为满
if(i<1 || i>l.length) exit(-2);
else if(l.length>=MAXSIZE) exit(-2);
else {
l.data[i-1]=e;
for(int j=l.length;j>=i;j--)
l.data[j]=l.data[j-1];
l.length++;
}
}
9.在线性表的第i个位置删除元素e
//在线性表的第i个位置删除元素e
void Delete_elem(Sqlist &l,int i,int e) {
//data[i-1]=e,
//从位置i到表尾的元素位置-1
//判断i是否合法
//判断线性表是否为空
if(i<1 || i>l.length) exit(-2);
else if(l.length==0) exit(-2);
else {
e=l.data[i-1];
for(int j=i;j<=l.length;j++)
l.data[j-1]=l.data[j];
l.length--;
}
}
10.清空顺序表
//清空顺序表
void Clearlist(Sqlist &l) {
l.length=0;
}
11.求顺序表的长度
//求顺序表的长度
int Length(Sqlist l) {
return l.length;
}
//输出顺序表中的元素
void Printflist(Sqlist l) {
int i=0;
while(l.data[i]) {
cout<<l.data[i]<<" ";
i++;
}
cout<<endl;
}
13.主函数:
int main () {
Sqlist l;
int e,i;
Initlist(l);
Create(l);
cout<<"刚刚创建的顺序表为:";
Printflist(l);
cout<<"刚刚创建的顺序表长度为:";
Length(l);
cout<<endl;
Isempty(l);
Isfull(l);
e=Getelem(l,3);
cout<<"刚刚创建的顺序表的第3个位置的元素为:";
cout<<e<<endl;
i=Locatedelem(l,3);
cout<<"刚刚创建的顺序表中元素3的位置为:";
cout<<i<<endl;
Insert_elem(l,3,2);
cout<<"在刚刚创建的顺序表中第三个位置插入元素2后的顺序表为:";
Printflist(l);
cout<<"在刚刚创建的顺序表中第三个位置插入元素2后的顺序表长度为:";
Length(l);
cout<<endl;
Delete_elem(l,3,2);
cout<<"在刚刚创建的顺序表中第3个位置删除元素2后的顺序表为:";
Printflist(l);
cout<<"在刚刚创建的顺序表中第3个位置删除元素2后的顺序表长度为:";
Length(l);
cout<<endl;
return 0;
}