写一个主程序来上机设计并验证线性表顺序表示的所有操作(至少包含算法2.3、2.4、2.5),并设计一个算法删除所有值大于min而且小于max的元素。
顺序表结构体
#define MaxSize 10
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
打印顺序表
void visit(SqList L)
{
for(int i=0;i<L.length;i++)
cout<<L.data[i]<<" ";
cout<<endl;
}
初始化顺序表
void InitList(SqList &L)
{
for(int i=0;i<MaxSize;i++)
L.data[i]=0;
L.length=0;
}
按位获取元素
bool GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length) return false;
e=L.data[i-1];
return true;
}
按值获取位序
int LocateElem(SqList L,ElemType e)
{
for(int i=0;i<L.length;i++)
if(L.data[i]==e) return i+1;
return 0;
}
插入
bool ListInsert(SqList &L,int i,ElemType e)
{
if(i<1||i>L.length+1) return false;
if(L.length>=MaxSize) return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
删除
bool ListDelete(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length) return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
删除所有大于min且小于max的元素
void MidDelete(SqList &L)
{
ElemType min=L.data[0];
ElemType max=L.data[0];
for(int i=0;i<L.length;i++){
if(L.data[i]<min) min=L.data[i];
if(L.data[i]>max) max=L.data[i];
}
int j=0;
ElemType e;
while(j<L.length){
if(min<L.data[j]&&L.data[j]<max)
ListDelete(L,j+1,e);
else
j++;
}
}
主函数
int main()
{
SqList L;
ElemType e;
InitList(L);
srand(time(NULL));
for(int i=1;i<=MaxSize;i++)
ListInsert(L,i,rand()%10);
visit(L);
ListDelete(L,1,e);
visit(L);
ListInsert(L,1,e);
visit(L);
MidDelete(L);
visit(L);
return 0;
}
完整代码
#include <iostream>
#include <time.h>
using namespace std;
#define MaxSize 10
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
void visit(SqList L)
{
for(int i=0;i<L.length;i++)
cout<<L.data[i]<<" ";
cout<<endl;
}
void InitList(SqList &L)
{
for(int i=0;i<MaxSize;i++)
L.data[i]=0;
L.length=0;
}
bool GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length) return false;
e=L.data[i-1];
return true;
}
int LocateElem(SqList L,ElemType e)
{
for(int i=0;i<L.length;i++)
if(L.data[i]==e) return i+1;
return 0;
}
bool ListInsert(SqList &L,int i,ElemType e)
{
if(i<1||i>L.length+1) return false;
if(L.length>=MaxSize) return false;
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length) return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
void MidDelete(SqList &L)
{
ElemType min=L.data[0];
ElemType max=L.data[0];
for(int i=0;i<L.length;i++){
if(L.data[i]<min) min=L.data[i];
if(L.data[i]>max) max=L.data[i];
}
int j=0;
ElemType e;
while(j<L.length){
if(min<L.data[j]&&L.data[j]<max)
ListDelete(L,j+1,e);
else
j++;
}
}
int main()
{
SqList L;
ElemType e;
InitList(L);
srand(time(NULL));
for(int i=1;i<=MaxSize;i++)
ListInsert(L,i,rand()%10);
visit(L);
ListDelete(L,1,e);
visit(L);
ListInsert(L,1,e);
visit(L);
MidDelete(L);
visit(L);
return 0;
}
输出示例
0 9 9 5 4 0 0 8 4 8
9 9 5 4 0 0 8 4 8
0 9 9 5 4 0 0 8 4 8
0 9 9 0 0