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