书本上的代码实现
#include <stdio.h> //输出 #include <cstdlib> //为了exit #define MAXSIZE 10 //书本的定义 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct{ ElemType *elem; int length; }SqList; //初始化 Status InitList(SqList &L){ L.elem=new ElemType[MAXSIZE]; if(!L.elem) //存储分配失败 exit(OVERFLOW); L.length=0; } //按位查找 Status GetElem(SqList L,int i,ElemType &e){ if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK; } //按值查找 Status LocateElem(SqList L,ElemType e){ for(int i=0;i<L.length;i++) if(L.elem[i]==e) return i+1;//返回地址 return 0; } //插入 Status ListInsert(SqList &L,int i,ElemType e){ if(i<1||i>L.length+1) return ERROR; if(L.length==MAXSIZE) return ERROR; 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 OK; } //删除 Status ListDelete(SqList &L,int i){ if((i<1)||(i>L.length)) for(int j=i;j<=L.length-1;j++){ L.elem[j-1]=L.elem[j]; } --L.length; return OK; } int main(){ SqList L; InitList(L); //插入 ListInsert(L,1,3); ListInsert(L,2,2); ListInsert(L,3,1); //查看表 for(int i=0;i<L.length;i++){ printf("elem=%d ",L.elem[i]); } // 按值查找 int elem; GetElem(L,1,elem);//输出2 printf("elem1=%d ",elem); GetElem(L,3,elem);//输出0 printf("elem2=%d ",elem); //按位查找 int local1=1; int local2=4; int elem1= LocateElem(L,local1);//输出3 int elem2= LocateElem(L,local2);//输出0 printf("elem1=%d,elem2=%d ",elem1,elem2); //删除 ListDelete(L,local1);//删除地址0 //查看表 for(int i=0;i<L.length;i++){ printf("elem=%d ",L.elem[i]); } }
王道考研的代码实现-插入删除
#include <stdio.h> #define MaxSize 5 //最大长度 //初始定义值 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; //静态存储 typedef struct{ int data[MaxSize];//数组的静态存储 int length;//当前长度 }SqList;//顺序表的类型定义 //初始化 void InitList(SqList &L){ L.length=0; } //插入 bool ListInsert(SqList &L,int i,int e){ if(i<1||i>L.length+1)//判断i的范围是否有效 return false; if(L.length>=MaxSize)//判断顺序表有没有满 return false; for(int j=L.length;j>=i;j--) L.data[j]=L.data[j-1]; //将第i个元素及之后的元素后一 L.data[i-1]=e; //在位置i处放入e L.length++; //长度加1 return true; } //删除 bool ListDelete(SqList &L,int i,int &e){ if(i<1||i>L.length) //判断i的范围是否有效 return false; e=L.data[i-1];//将被删除的元素赋值给e for(int j=i;j<L.length;j++)//将第i个位置后的元素前移 L.data[j-1]=L.data[j]; //应该再删除最后一个 L.data[L.length-1]=0; L.length--; //线性表长度减1 return true; } //违规打印 int main(){ SqList L;//声明 InitList(L);//初始化顺序表 ListInsert(L,1,3);//位置从1开始 ListInsert(L,2,2); ListInsert(L,3,1); ListInsert(L,1,5);//插入1的位置 //删除前,可以将MaxSize改成L.length for(int i=0;i<MaxSize;i++){ printf("data[%d]=%d ",i,L.data[i]); } int e=-1;//用变量e把删除的元素“带回来” if(ListDelete(L,2,e)) printf("删除了元素了%d ",e); else printf("删除了元素了"); for(int i=0;i<MaxSize;i++){ printf("data[%d]=%d ",i,L.data[i]); } }
王道考研的代码实现-查找
#define InitSize 10 //顺序表的初始长度 #include <stdlib.h>//malloc函数的头文件 #include <stdio.h> typedef int ElemType; typedef struct{ ElemType *data; //指示动态分配数组的指针 int MaxSize; int Length; }SeqList; //按位查找 ElemType GetElem(SeqList L,int i){ return L.data[i-1];//和普通访问数组一样 } //按值查找 int LocateELem(SeqList L,int e){ for(int i=0;i<L.Length;i++) if(L.data[i]==e) return i+1; return 0; } //初始化 void InitList(SeqList &L){ L.data=(int *)malloc((InitSize)*sizeof(int)); L.Length=0; L.MaxSize=InitSize; } bool ListInsert(SeqList &L,int i,int e){ if(i<1||i>L.Length+1) return false; if(L.Length>=L.MaxSize) return false; for(int j=L.Length;j>=i;j--) L.data[j]=L.data[j-1]; //将第i个元素及之后的元素后一 L.data[i-1]=e; //在位置i处放入e L.Length++; //长度加1 return true; } int main(){ SeqList L; InitList(L); ListInsert(L,1,3);//位置从1开始 ListInsert(L,2,2); ListInsert(L,3,1); int e=3; e=LocateELem(L,e); printf("%d",e); }
注:书本是指严奶奶的数据结构,使用的是dev