数据结构实验1:线性表

数据结构实验1:线性表

第一次写博客,也没啥好说的,直接上代码吧。
我的代码参考过其他人的,不过已经找不到了,如果有问题,欢迎联系。

#include 
#include
#include
#define List_INIT_SIZE 100
#define listINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//int i,*p,*q;
typedef int ElemType;
//typedef int Status;
//ElemType e;
typedef struct{
ElemType *elem;	//储存空间基址,指针类型 
int length;
int listsize;
}SqList;//定义Sq这个新的数据类型

Status InitList_Sq(SqList &L)//构建空的线性表 L
{
	L.elem=(ElemType *)malloc(List_INIT_SIZE*sizeof(ElemType));
	if(!L.elem) exit(OVERFLOW);//储存分配失败 
	L.length=0;//空表长度为1 
	L.listsize=List_INIT_SIZE;//初始储存容量
	return OK; 
}

void input(SqList &L)//输入函数 
{
scanf("%d",L.elem);//先输入一个数据,不然无法进行循环
while(*L.elem){
	L.elem++;//输入后指针后移 
	L.length++;//表长加一 
	scanf("%d",L.elem);//循环中再次输入数据 
} 	
}

void print(SqList &L)//输出函数
{
	int n;
	for(n=0;n<L.length;n++){
		printf("%d   ",*L.elem);
		L.elem++;//输出后指针后移 
	}
} 

Status ListInsert_Sq(SqList &L,int i,ElemType e)//插入函数,
{
	//在第 i个元素之前插入 e
	// i的合法值为1<=i<=Listlength.Sq(L)+1 
	Status *newbase;//定义新的基址,因为elem也是一个指针
	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)exit(OVERFLOW);//分配失败,跳回操作系统
		L.elem=newbase;//新基址 
		L.listsize+=listINCREMENT;//增加储存容量 
	} 
	q=&(L.elem[i-1]);//为q插入位置 
	for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;//插入位置以及之后的元素后移 
	*q=e;//插入e
	++L.length;//表长加一 
	return OK; 
} 
 
 Status ListDelete_Sq(SqList &L,int i,ElemType &e)//删除函数
 {
 	//删除第 i个元素,并用 e返回
	 if(i<1||i>L.length) return ERROR;//i 值不合法
	 p=&(L.elem[i-1]);//p 为要删除的位置 
	 e=*p;//将删除的元素给 e 
	 q=L.elem+L.length-1;//表尾元素的位置 
	 for(++p;p<=q;++p)
	 *(p-1)=*p;//在被删除元素位置后的元素左移 
	 --L.length; //	  表长减一 
	 return OK;
 } 
 
 Status Compare(ElemType m,ElemType e)//比较函数
 {
 	if(m==e) return OK;
 	else return ERROR;	 
 }
 
 int LocateElem_Sq(SqList L,ElemType e,Status(*Compare)(ElemType,ElemType))//查找函数
 {
 	//查找第一个与 e相等的元素,找到则返回其位序,否则返回 0
	 i=1;
	 p=L.elem;
	 while(i<=L.length&&!(*Compare)(*p++,e)) i++;
	 if(i<=L.length) return i;
	 else return 0; 
 } 
 
 main(){
 	SqList L;
 	int x,y,z,j,k,e,u,v,r,m,l=1;
 	int a[100];
 	if(InitList_Sq(L)){
	 	L.elem=a;//将数组的首地址给 elem 
	 	printf("请输入数据:\n");
	 	input(L);//输入线性表 L
	 }//
	 L.elem=a;//指针elem 回到数组首地址
	 printf("你输入的数据为:\n");
	 print(L);
	 printf("\n");
	 do{
 		printf("是否进行插入操作,如果进行输入1,否则输入0,并以回车键结束\n");
		 scanf("%d",&x);
		 if(x==1){
 			printf("请输入要插入的位置:");
		  scanf("%d",&y);
		  printf("请输入要插入的元素:");
		  scanf("%d",&z);
		L.elem=a;//指针elem 回到数组首地址  
		  if(ListInsert_Sq(L,y,z)){
  			printf("插入元素后的线性表:\n");
  			print(L);
		  }//
  		}//
  		L.elem=a;//指针elem 回到数组首地址
  		printf("\n是否进行删除操作,如果进行输入1,否则输入0,并以回车键结束\n");
  		 scanf("%d",&j);
		 if(j==1){
 			printf("请输入要删除的位置:");
		  scanf("%d",&k);
		if(ListDelete_Sq(L,k,e)	){
  			printf("删除的元素是:%d",e);
		    printf("删除元素后的线性表:\n");	   
  			print(L);
	                     	}//
 		} //
 		L.elem=a;//指针elem 回到数组首地址
 		printf("\n是否进行查找操作,如果进行输入1,否则输入0,并以回车键结束\n");
		 scanf("%d",&u);
		 if(u==1){
 			printf("请输入要查找的元素:");
		  scanf("%d",&v);
		  r=LocateElem_Sq(L,v,Compare);
		  if(r) 
		  printf("元素%d在线性表中的位置为:%d\n",v,r);
		  else printf("你输入的元素在此线性表中冒有找到;\n");
		 }
		 printf("\n是否还想继续进行这些操作,如果想输入1,不想输入0\n");
		 scanf("%d",&m);
		 l=m;
 		
 	}while(l); 
 	
 }//mian 

你可能感兴趣的:(课程实验)