注意:
1.传值时的符号(*,&),假如是查找这样不用改变顺序表值和长度的,就可以不传地址符
2.头文件<stdlib.h>里有exit()函数;
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{//定义结构体
int *elem; //定义指针用来存放基地址
int length; //用来表示后来的数组长度
}SqList;
void InitList(SqList *L); //定义表
void ListInsert(SqList *L,int i,int e); //插入
void ListDelete(SqList *L,int i); //删除
void ListBianli(SqList *L); //遍历
int GetElem(SqList L,int i); //取值
int LocateElem(SqList L,int e); //查找
int main()
{
SqList L;
InitList(&L);
ListInsert(&L,1,12);
ListInsert(&L,1,11);
ListDelete(&L,1);
ListInsert(&L,1,12);
ListInsert(&L,1,11);
ListBianli(&L);
//printf("%d",L.elem[0]);
return 0;
}
void InitList(SqList *L)
{//构造空表
L->elem=(int *)malloc(sizeof(int)*MAXSIZE);
if(!L->elem)
{
exit(0); //void exit(int status)函数,书本传入的是个伪代码,这里用0即可
}
L->length=0;
}
void ListInsert(SqList *L,int i,int e) //插入元素
{
if(i<1 || i>L->length+1)
printf("你给的插入位置i不合法\n");
if(L->length==MAXSIZE)
printf("存储空间已满\n");
for (int j = L->length-1; j>= i-1; j--)
{
L->elem[j+1]=L->elem[j];
}
L->elem[i-1]=e;
L->length++;
}
void ListDelete(SqList *L,int i) //删除第i个元素
{
if(i<1 || i>L->length)
{
printf("你给的删除位置i不合法\n");
}
for(int j=i ;j<=L->length-1;j++)
{
L->elem[j-1]=L->elem[j];
}
L->length--; //长度要-1
}
int LocateElem(SqList L,int e) //查找,找到元素e相同的值了就返回位置
{
int temp=0;
for (int i = 0; i < L.length; i++)
{
if (L.elem[i]==e)
{
temp=i+1;
break;
}
}
return temp;
}
int GetElem(SqList L,int i) //取值,反回查找到的值
{
if (i<1 || i>L.length)
{
printf("输入的位置不合法\n");
}
return L.elem[i-1];
}
void ListBianli(SqList *L) //书上没有自己整的,用来遍历顺序表
{
for (int i = 0; i < L->length; i++)
{
printf("%d ",L->elem[i]);
}
}