C语言顺序表
C语言顺序表
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define MAXSIZE 5
typedef char ElemType ;
//声明顺序表的结构体类型
typedef struct{
ElemType *elem;
int length;
}Sqlist;
//初始化函数,构造一个空的线性表,申请线性表的存储空间
int InitList(Sqlist *L){
//第一步:为顺序表申请空间,成功返回OK,否则返回error
L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
if(L->elem==NULL)
return ERROR;
//第二步:线性别的当前长度为0
L->length=0;
return OK;
}
//插入元素的函数,在第i个元素之前·插入一个新的元素
int InsertList(Sqlist *L,int i,ElemType e){
int j;
if(L->length==MAXSIZE)
{
L->elem=(char *)realloc(L->elem,(MAXSIZE+10)*sizeof(ElemType));
printf("\n---------开辟空间--\n");
}
// 第一步:为新元素让出位置,将第i个元素开始后移
for(j=L->length-1;j>=i-1;j++)
L->elem[j+1]=L->elem[j];
// 第二步:将新元素放入到第i个位置
L->elem[i-1]=e;
// 第三步: 线性表的当前长度加1
L->length++;
return OK;
}
//删除函数的元素,删除线性表中第i个元素
int DeleteList(Sqlist *L,int i){
//第一步:将第i+1至第n个元素依次向前移动一个位置
int j;
if(i<1||i>L->length+1)
return ERROR;
for(j=i;j<=L->length-1;j++)
L->elem[j-1]=L->elem[j];
//第二步:length-1
--L->length;
return OK;
}
//获取元素的函数,取线性表中第i个元素的值
int GetElem(Sqlist L,int i,ElemType *e){
//将第 i个数据元素L->elem[i-1]赋值给e,通过e返回
if(i<1||i>L.length)
return ERROR;
*e=L.elem[i-1];
return OK;
}
//元素的定位,根据某个值在线性表中查找其位置,若没有此元素,则返回0
int LocateElem(Sqlist L,ElemType e){
//从第一个元素依次和e比较找到相同,返回该位置i+1
int i;
for(i=0;i<L.length;i++)
if(L.elem[i]==e)
return i+1;
return 0;
}
//输出线性表元素
void print(Sqlist *L){
int i;
for(i=0;i<L->length;i++)
{
printf("第%d个元素:",i+1);
printf("%c\n",L->elem[i]);
}
printf("共%d个元素",L->length);
}
int main(){
int i;
Sqlist Lp;
//测试初始化
i=InitList(&Lp);
ElemType e;
printf("初始化成功!\n");
printf("\n\n");
//测试插入 在第一个位置上插入A
int jj;
int y;
printf("------插入----------\n");
printf("请输入插入个数:");
scanf("%d",&jj);
for(y=1;y<=jj;y++)
{
char el;
printf("输入值:") ;
scanf("\n%c",&el) ;
i=InsertList(&Lp,y,el);
if(i==ERROR)
printf("插入失败\n");
else
{
print(&Lp);
printf("插入成功!\n");
}
}
//测试删除
int b;
printf("--进入删除:");
printf("请输入删除元素位置:") ;
scanf("%D",&b);
i=DeleteList(&Lp,b);
if(i==ERROR)
printf("删除失败\n");
else
printf("删除成功\n");
print(&Lp);
printf("\n\n");
//测试取值
int j;
printf("--进入取值:\n");
printf("请输入位置:");
scanf("\n%d",&j);
i=GetElem(Lp,j,&e);
if(i==ERROR)
printf("第%d不在范围内\n",j);
else
printf("测试成功,测试取值%c\n",e);
printf("\n\n");
//测试查找
char aa;
printf("--进入查找:\n");
printf("请输入元素:") ;
scanf("\n%c",&aa);
int k=LocateElem(Lp,aa);
if(k==0)
printf("%c不在范围内\n",aa);
else
printf("测试成功,测试查找为第%d个\n",k);
print(&Lp);
return 0;
}