严蔚敏版数据结构—顺序表

严蔚敏版数据结构是本好书!

少废话咯,直接上代码研究吧!

代码不难,重在理解

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0

//定义好书的数据类型 Book类型
typedef struct
{
	char name[20];
	char no[10];
	float price;
}Book;
//定义顺序表结构
typedef struct
{
	Book *p;
	int length;
}SqList;

//初始化顺序表 
int InitList(SqList &L)
{
	L.p=new Book[100];
	L.length=0;
	
	return OK;
}
//顺序表取值 
int  GetElem(SqList L,int i,Book &e)
{
	if(i<1||i>L.length) 
	{
		printf("传入i值不合理!");
		return ERROR;
	}
		
	e=L.p[i-1];
	
	return OK;
} 
//查找元素 
int LocateElem(SqList L,Book e)
{
	int i;
	for(i=0;i<L.length;i++)
	{
		if(L.p[i].price==e.price)//这里本来还要判断其他内容是否相等,但是C语言字符串的判断挺麻烦 
			return i+1;			// 这儿作为练习,就省略,简单起见额,判断也不难,写个函数即可 
	}	return -1;
}
//插入元素
int  InsertElem (SqList &L,int i,Book e)
{
	if(i<1||i>L.length+1)
	{
		printf("传入i值不合理!");
		return ERROR;
	}
		
	if(L.length==100)
	{	
		printf("当前顺序表储存空间已满!");
		return ERROR;
	}
	
	int j;
	for (j=L.length-1;j>=i-1;j--)
	{
		L.p[j+1]=L.p[j];
	}
	
	L.p[i-1]=e;
	++L.length;
	return OK;
	
	
} 
//删除元素
int DeleteElem(SqList &L,int i)
{
    int j;
	if(i<1||i>L.length+1)
	{
		printf("传入i值不合理!");
		return ERROR;
	}
	for (j=i;j<L.length-1;j++)
	{
		L.p[j-1]=L.p[j];
	}
	--L.length;
	
	return OK;
} 

//输入元素
void InputElem(SqList &L,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("请输入书本信息:");
		scanf("%s",&L.p[i].name);
		scanf("%s",&L.p[i].no);
		scanf("%f",&L.p[i].price);
	}
	L.length=n;
}


//输出顺序表 
void PrintElem(SqList L)
{
	 int i;
	 for(i=0;i<L.length;i++)
	 {
	 	printf("The -NO-%d-Book:     ",i+1);
	 	printf("%s   ",L.p[i].name);
	 	printf("%s   ",L.p[i].no);
	 	printf("%.2f  \n",L.p[i].price);
	 } 
} 

int main()
{	Book a,b ;          //作为插入的元素 
	SqList L;
	InitList(L);     //创建顺序表 
	InputElem(L,3);  //输入初始值,三个元素 
	PrintElem(L);    //打印一下看看 
	//给 a 赋值 
	strcpy(a.name,"666");
	strcpy(a.no,"666");
	a.price=6.66;
  
 	printf("\n---------------插入a元素在第二个位置---------------\n");
	InsertElem(L,2,a);//插入元素 
	PrintElem(L); 	  //打印看看插入是否成功 
	//打印看看查询是否成功 
	printf("\n------------a元素在第%d个位置!-------------\n",LocateElem(L,a)); 
	//取位置是二的元素的对象
	printf("\n------------取出位置为二的元素给b变量-------------\n",LocateElem(L,a)); 
	GetElem(L,2,b);
	printf("\n b_name:%s,b_no:%s,b_price:%.2f\n",b.name,b.no,b.price);
	
	//删除a元素
	printf("\n------------将a元素删除后的顺序表-------------\n",LocateElem(L,a)); 
	DeleteElem(L,2);
	PrintElem(L);
	
	return 0;
} 

测试

如有错误,还请多多指教,指正,谢谢

猜你喜欢

转载自blog.csdn.net/cj151525/article/details/82958377