代码如下
/**
C语言实现顺序表的各种基本操作
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int status;
typedef int ElemType;
#define MAXSIZE 100
#define OK 0
#define ERROR -1
typedef struct{
ElemType *elem;
int length;
}SqList;
status InitList(SqList &L){
//构造一个空的顺序表(初始化顺序表)
L.elem=(ElemType*)malloc(sizeof(ElemType)*100);
//使用malloc()函数给顺序表分配一个MAXSIZE大小的数组空间
if(!L.elem){
printf("存储分配失败\n");
return ERROR;
}
L.length=0;
return OK;
}
status GetElem(SqList &L,int i,ElemType &e){
//顺序表的存值操作
if(i<1||i>L.length){
printf("i取值不合理\n");
return ERROR;
}
e=L.elem[i-1];//elem[i-1]单元存储第i个元素
return OK;
}
status LocateElem(SqList &L, ElemType e ){
//查找操作: 在顺序表L中查找值为e的元素 返回它的序号,如果找不到,返回一个ERROR错误信息
int i;
for(i=0;i<L.length;i++){
if(e==L.elem[i]){
printf("你想要的查找的值是顺序表中的第%d个元素\n",i+1);
return OK;
}else{
printf("查找错误,顺序表中没有这个数据\n");
return ERROR;
}
}
}
status ListInsert(SqList &L,int i,ElemType e){
//顺序表的插入操作: 在顺序表第i个位置插入元素e
if(i<1||i>L.length+1){// i值的合法取值范围是(1<=i<=L.length+1)
printf("插入失败,i值不合法\n");
return ERROR;
}
if(L.length==MAXSIZE){
printf("插入失败,当前存储空间已满\n");
return ERROR;
}
for(int 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;
/*ElemType *p=L.elem+i-1,*q=L.elem+L.length-1;
for(q;q>=p;q--){
*(q+1)=*q;//移动元素
*p=e;
L.length++;
return OK;*/
}
}
status ListDelete(SqList &L,int i){
//删除操作:在顺序表L中删除第i个元素
if(i<1||i>L.length){//i的取值范围是1<=i<=L.length+1
printf("i取值不合理\n");
return ERROR;
}
for(int j=i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j];//被删除元素之后的所有元素位置前移一位
--L.length;//表长减1
return OK;
}
}
void CreateList(SqList &L,int n){
printf("请输入%d个整数(以空格间隔开来:)\n",n);
for(int i=0;i<5;i++){
int num;
scanf("%d",&num);
L.elem[i]=num;
L.length++;
}
}
void DispalyList(SqList &L){//输出顺序表
printf("新的顺序表的是这样的:\n");
for(int i=0;i<=L.length-1;i++){
printf("%d ",L.elem[i]);
}
printf("\n");
}
int main(){
SqList L;
InitList(L);//初始化顺序表
CreateList(L,5);//给顺序表赋值
DispalyList(L);
ListInsert(L,2,10);//插入元素
DispalyList(L);
ListDelete(L,2);//删除元素
DispalyList(L);
GetElem(L,1,L.elem[1]);//存储元素
DispalyList(L);
LocateElem(L,1);//查找元素,返回序号
system("pause");
return 0;
}