数据结构顺序表基本操作 C++
#include<stdio.h> #define MAXSIZE 10 //默认的最大长度 //顺序表类型定义 typedef struct { int *elem; //指示动态分配数组的指针 int length; //顺序表的当前长度 }SqList; //初始化顺序表 bool InitList(SqList &L){ L.elem=new int[MAXSIZE]; //为顺序表分配空间 if(!L.elem) //存储分配失败 return false; L.length=0; return true; } //销毁顺序表 void DestroyList(SqList &L){ if(L.elem) delete L.elem; //释放存储空间 } //清空顺序表 void ClearList(SqList &L){ L.length=0; } //求顺序表的长度 int GetLength(SqList L){ return L.length; } //判断顺序表是否为空 bool IsEmpty(SqList L){ if(L.length==0) return true; else return false; } //顺序表的取值(取第i个元素) bool GetElem(SqList L,int i,int &e){ if(i<1 || i>L.length) //判断i值是否合理 return false; e=L.elem[i-1]; return true; } //插入 bool ListInsert(SqList &L,int i,int e){ if(i<1 ||i>L.length+1) return false; //插入位置不合法 if(L.length==MAXSIZE) return false; //存储空间已满,插入失败 for(int j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移 L.elem[i-1]=e; L.length++; return true; } //顺序表的查找 int LocateElem(SqList L,int e){ for(int i=0;i<L.length;i++) if(L.elem[i]==e) return i+1; return -1; //查找失败 } //删除 bool ListDelete(SqList &L,int i){ if(i<1 ||i>L.length) return false; //删除位置不合法 for(int j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移 L.length--; return true; } //遍历 void PrintList(SqList L){ for(int i=0;i<L.length;i++) printf("L.elem[%d]=%d\n",i,L.elem[i]); } int main(){ //定义和初始化 SqList L; InitList(L); //插入元素 for(int i=1;i<7;i++) ListInsert(L,i,i); //遍历 PrintList(L); //取值 int e; GetElem(L,3,e); printf("第三个元素=%d\n",3,e); //查找 printf("元素3的位置:%d\n", LocateElem(L,3)); //删除元素3 ListDelete(L,3); //遍历 PrintList(L); return 0; }