1、顺序表的 “一条龙”:构造、初始化、查找、删除、插入
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int Status; //数据元素的类型 就是给int换个名(Status = int)
typedef int ElemType; //数据元素的类型 ElemType = int
#define MAXSIZE 100 //最大长度(给常量取别名)
typedef struct {
ElemType *elem;
int length;
}SqList;//无名结构体取别名
//构造一个空的顺序表L,其实就是一个函数
Status InitList (SqList &L)
{
L.elem = new ElemType[MAXSIZE]; //为顺序表分配空间
if(!L.elem)
exit(OVERFLOW); //存储分配失败
L.length = 0; //空表长度为0
return OK;
}
//输出顺序表L
Status ShowList(SqList L)
{
int i;
cout<<"顺序表为:";
for(i = 0; i < L.length; i++)
cout<<L.elem[i]<<"\t";
}
ElemType GetElem2(SqList L,int i)
{
if (i<1||i>L.length) //判断i值是否合理,若不合理,返回ERROR
return ERROR;
ElemType e = L.elem[i-1]; //第i-1的单元存储着第i个数据
return e;
}
Status GetElem(SqList L,int i,ElemType &e)//多了一个引用
{
if (i<1||i>L.length)//判断i值是否合理,若不合理,返回ERROR
return ERROR;
e=L.elem[i-1]; //第i-1的单元存储着第i个数据
return OK;
}
//查找
int LocateELem(SqList L,ElemType e)
{
int i;
for (i = 0; i < L.length; i++)
if (L.elem[i]==e)
return i+1; // +1易掉
return 0;
}
//插入
Status ListInsert(SqList &L,int i ,ElemType e)
{
int j;
if(i<1 || i>L.length+1)
return ERROR; //i值不合法
if(L.length==MAXSIZE)
return ERROR; //当前存储空间已满(满了就不能后移)
for(j = L.length-1; j >= i - 1; j--)
L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长增1(易掉)
return OK;
}
//删除
Status ListDelete(SqList &L,int i)
{
int j;
if((i<1)||(i>L.length))
return ERROR; //i值不合法
for (j = i; j <= L.length - 1; j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; //表长减1(易掉)
return OK;
}
Status ListDelete2(SqList &L,int i,ElemType &e)
{
int j;
if((i<1)||(i>L.length))
return ERROR; //i值不合法
e=L.elem[i-1];
for (j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; //表长减1
return OK;
}
int main()
{
int n,j,a,b,y;
SqList x;
InitList (x);//初始化
cout<<"请输入元素个数: ";
cin>>n;
cout<<"请输入元素: "<<endl;
for(int i = 0; i < n; i++)
{
cin>>x.elem[i];
x.length++;
}
ShowList(x);
cout<<endl;
cout<<"请输入要查找的值:";
cin>>n;
j=LocateELem(x,n);
cout<<"查找值的位置是:"<<j<<endl;
cout<<endl;
cout<<"请输入要插入元素的位置和数值:"<<endl;
cin>>a>>b;
ListInsert(x,a,b);
ShowList(x);
cout<<endl<<endl;
cout<<"请输入要指定删除元素的位置:";
cin>>y;
ListDelete(x,y);
ShowList(x);
return 0;
}
【注】
//灰色的代码是无名结构体,整块代码是在给无名结构体取别名