线性顺序表的创建与使用

#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
今日推荐