#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define Error 0
typedef int Status;
typedef int Boolean;
typedef int ElemType;
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
typedef struct
{
ElemType *elem;
int length;
int listsize;
char name[10];
}SqList;
/*创建结构体(Sqlist)*/
int Empty(SqList L)
{
if(L.length==0)
return TRUE;
return FALSE;
}
/*创建子函数(子程序),这是用来判断顺序表是否为空*/
Status InitList(SqList &L)
{
L.elem=new ElemType[LIST_INIT_SIZE];
if(!L.elem)
return Error;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
/*初始化顺序表,产生一个新的存储空间*/
Status ListInsert(SqList &L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return Error;
/*判断i值是否合法*/
if(L.length>=L.listsize)
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return Error;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
/*判断存储空间是否已满,增加储存容量*/
q=L.elem +i-1;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
//插入算法
}
Status ListDelete(SqList &L,int i,ElemType *e)
{
ElemType *p,*q;
if(i<1||i>L.length)
return Error;
if(Empty(L)) {printf("empty\n");return Error;}
p=L.elem+i-1;
*e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
L.length--;
return OK;
//删除算法
}
Status LocateElem(SqList L,ElemType e,Status (*compare)(ElemType,ElemType))
{
ElemType *p;
int i=1;
p = L.elem ;
while(i<=L.length &&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return Error;
}
//查找值,返回位序
Status compare(ElemType c1,ElemType c2)
{
if(c1==c2)
return TRUE;
return FALSE;
}
//配套查找位序函数
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length ) return Error;
e=L.elem[i-1];
return OK;
}
//取值函数
Status DestroyList(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return OK;
}
//销毁顺序线性表L
Status ClearList(SqList &L)
{
L.length=0;
return OK;
}
//将L重置为空表
int ListLength(SqList L)
{
return L.length;
}
//返回L中数据元素个数
void output(SqList L){
int i;
if (L.length==0)printf("error\n");
for(i=0;i<L.length;i++)
printf("%d " ,L.elem[i]);
printf("\n");
}
//下面开始执行主函数
main(){
int i, x, w,z;
SqList L;
if(InitList(L)==Error)
{
printf("Error\n");
return Error;
}
// if(Empty(L)) printf("empty\n");
for(i=1;i<=10;i++)
ListInsert(L,1,i);
printf("你制作的顺序表为:");
output(L);printf("\n");
ListDelete(L,1,&x);
printf("要删除的值为:%d\n",x);//输出删除的值
printf("\n");
printf("删除操作后的顺序表为:");
output(L);printf("\n");
w=LocateElem(L,1,compare);
printf("查找值的位序为:%d\n",w);//输出查找值的位序
printf("\n");
GetElem(L,9,z);
printf("你要取的值为:%d\n",z);//输出取值
printf("\n");
ClearList(L);
DestroyList(L);//销毁顺序线性表L
}
线性顺序表的创建与使用
猜你喜欢
转载自blog.csdn.net/sinat_37676560/article/details/64950880
今日推荐
周排行