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; }
【注】
//灰色的代码是无名结构体,整块代码是在给无名结构体取别名