【数据结构】数据结构基础:顺序表功能练习和链表理论思维导图

每日学习

一、顺序表功能练习
宠物狗管理系统:
dog.h(头文件):

#ifndef _DOG_H
#define _DOG_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 30
//定义狗结构体
typedef struct{
	char name[MAX]; 	//狗的姓名
	double prince; 	//价格
	int age; 		//狗龄
	char breed[MAX]; //品种
}dog,*dogPtr;
//定义狗顺序表
typedef struct{
	dog d[MAX]; //存储狗信息的数组
	int len; 	//存储狗的数量
}dogList,*dogListPtr;
//创建顺序表
dogListPtr list_create();
//判满操作
int list_full(dogListPtr D);
//判空操作
int list_empty(dogListPtr D);
//添加狗子函数
int list_add(dogListPtr D,dog g);
//遍历所有狗狗函数
void list_show(dogListPtr D);
//按狗名查狗函数,返回狗在表中的位置
int list_searvh_value(dogListPtr D,char name[MAX]);
//删除指定位置的狗函数
int list_delete_pos(dogListPtr D,int pos);
//释放表
void list_free(dogListPtr D);
//按特定种类查狗函数,返回这个种类的所有狗狗信息
int list_searvh_breed(dogListPtr D,char breed[MAX]);
//按指定价格区间查狗函数,返回这个价格区间之内的所有狗狗信息
int list_searvh_price(dogListPtr D,double fprince,double bprince);
#endif

dog.c(源文件):

#include "dog.h"
//创建顺序表
dogListPtr list_create(){
	//在堆区申请一个顺序表的空间大小
	dogListPtr D=(dogListPtr)malloc(sizeof(dogList));
	//判断是否申请成功
	if(NULL==D){
		printf("狗子空间申请失败!\n");
		return NULL;
	}
	//创建成功后
	memset(D->d,0,sizeof(D->d)); //清空数组
	D->len=0; 					//数组长度清零
	printf("恭喜你成功创建了新的狗狗国度!\n");
	return D;
}
//判满操作
int list_full(dogListPtr D){
	if(NULL==D){
		printf("违法国度!\n");
		return 0;
	}
	//合法但是已经满了
	return D->len == MAX;
}
//判空操作
int list_empty(dogListPtr D){
	//判断逻辑
	if(NULL==D){
		printf("违法国度!\n");
		return 0;
	}
	//合法返回是否空
	return D->len == 0;
}
//添加狗子函数
int list_add(dogListPtr D,dog g){
	//判断逻辑
	if(NULL==D||list_full(D)){
		printf("狗狗加入失败\n");
		return 0;
	}
	//添加逻辑
	printf("开始录入狗信息:\n");
	printf("请输入狗名:");
	scanf("%s",D->d[D->len].name);
	printf("请输入狗的定价:");
	scanf("%lf",&D->d[D->len].prince);
	printf("请输入狗的年龄:");
	scanf("%d",&D->d[D->len].age);
	printf("请输入狗的品种:");
	scanf("%s",D->d[D->len].breed); 
	//将新狗的信息全部放入最后一个位置成功后
	//表的变化
	D->len++;
	printf("狗狗加入成功\n");
	return 1;
}
//遍历所有狗狗函数
void list_show(dogListPtr D){
	if(NULL==D || list_empty(D)){
		printf("找不到狗狗,查看狗狗失败!\n");
		return;
	}
	printf("名字\t价格\t年龄\t品种\n");
	for(int i=0;i<D->len;i++){
		printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
				D->d[i].prince,
				D->d[i].age,D->d[i].breed);
	}
}
//按狗名查狗函数,返回狗在表中的位置
int list_searvh_value(dogListPtr D,char name[MAX]){
    //判断逻辑
    if(NULL==D || list_empty(D))
    {
        printf("查找失败\n");
        return -1;
    }

    //查找逻辑
	printf("名字\t价格\t年龄\t品种\n");
    for(int i=0; i<D->len; i++)
    {
        //判断元素是否跟要查找的值相等
        if(strcmp(name,D->d[i].name)==0)
        {
			printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
					D->d[i].prince,
					D->d[i].age,D->d[i].breed);

            return i;
        }
    }

    printf("查无此狗\n");
    return -1;      //没找到返回-1	
}
//删除指定位置的狗函数
int list_delete_pos(dogListPtr D,int pos){
	//判断逻辑
    if(NULL==D || list_empty(D) || pos<0 || pos>=D->len)
    {
        printf("购买失败\n");
        return 0;
    }

    //删除逻辑
    for(int i=pos+1; i<D->len; i++)
    {
        D->d[i-1] = D->d[i];   //将元素前移一格
    }

    //表的变化
    D->len--;

    printf("购买成功\n");
    return 1;
}
//按特定种类查狗函数,输出这个种类的所有狗狗信息
int list_searvh_breed(dogListPtr D,char breed[MAX]){
    //判断逻辑
    if(NULL==D || list_empty(D))
    {
        printf("查找失败\n");
        return -1;
    }

    //查找逻辑
	int flag=0;
	printf("名字\t价格\t年龄\t品种\n");
    for(int i=0; i<D->len; i++)
    {
        //判断元素是否跟要查找的值相等
        if(strcmp(breed,D->d[i].breed)==0)
        {
			printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
					D->d[i].prince,
					D->d[i].age,D->d[i].breed);
        	flag=1;
		}
    }

    if(flag==0){printf("不好意思,没有此等狗\n");return -1;}
	return 1;
}

//释放表
void list_free(dogListPtr D){
	if(NULL!=D){
		free(D);
		D=NULL;
	}
	printf("后台狗释放成功\n");
}
//按指定价格区间查狗函数,返回这个价格区间之内的所有狗狗信息
int list_searvh_price(dogListPtr D,double fprince,double bprince){
    //判断逻辑
    if(NULL==D || list_empty(D))
    {
        printf("查找失败\n");
        return -1;
    }

    //查找逻辑
	int flag=0;
	printf("名字\t价格\t年龄\t品种\n");
    for(int i=0; i<D->len; i++)
    {
        //判断元素是否跟要查找的值相等
        if(D->d[i].prince>=fprince&&D->d[i].prince<=bprince)
        {
			printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
					D->d[i].prince,
					D->d[i].age,D->d[i].breed);
        	flag=1;
		}
    }
    if(flag==0){printf("不好意思,本国还没有这种身价的狗\n");return -1;}
	return 1;
}

main.c(测试文件):

#include "dog.h"

int main(int argc, const char *argv[])
{
	//申请狗狗顺序表
	dogListPtr D=list_create();
	

	while(1){
		printf("*************欢迎来到狗狗的国度*************\n");
		printf("*************挑选一只可爱的狗狗*************\n");
		int a;
		printf("本系统有以下功能:\n0:退出本系统;\n1:显示特定种类的所有狗子;\n2:显示特定价格区间的狗狗;\n3:显示所有狗狗\n4:选好了,要买狗;\n5:我要添加狗狗\n");
		printf("请输入你想要用的功能的序号:");
		scanf("%d",&a);
		switch(a){
			case 0:
				list_free(D);
				D=NULL;
				return 0;
			case 1:
				printf("*************欢迎来到种类之家*************\n");
				char breed[MAX];
				printf("请输入你想要查看的一种狗狗种类:");
				scanf("%s",breed);
				list_searvh_breed(D,breed);	
				break;
			case 2:
				printf("*************欢迎来到身价之家*************\n");
			    double fro,back;
				printf("请输入你想要查看的最低身价:");
				scanf("%lf",&fro);
				printf("请输入你想要查看的最高身价:");
				scanf("%lf",&back);
				list_searvh_price(D,fro,back);
				break;
			case 3:
				printf("*************欢迎来到狗狗大厅*************\n");
				list_show(D);
				break;
			case 4:
				printf("*************欢迎来到契约之家*************\n");
				char name[MAX];
				printf("请输入你要签订契约的狗狗姓名:");
				scanf("%s",name);
				list_delete_pos(D,list_searvh_value(D,name));
				break;
			case 5:
				printf("*************欢迎来到养育之家*************\n");
				dog g;
				list_add(D,g);
				break;
			default:
				printf("请输入有效数字,输入多次无效数字会被狗狗咬哦~\n");
		}
		printf("输入0退出系统,输入其他数字继续调侃本系统,请输入:");
		scanf("%d",&a);
		if(a==0){
			list_free(D);
			D=NULL;
			return 0;
		}
	}
	return 0;
}

运行结果:

linux@linux:~/study/abc/homework$ gcc *.c
linux@linux:~/study/abc/homework$ ./a.out 
恭喜你成功创建了新的狗狗国度!
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:小黄
请输入狗的定价:100
请输入狗的年龄:3
请输入狗的品种:金毛
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:小菜
请输入狗的定价:1000
请输入狗的年龄:2
请输入狗的品种:马尔济斯
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:巧巧
请输入狗的定价:500
请输入狗的年龄:2
请输入狗的品种:阿拉斯加
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:大黄
请输入狗的定价:10
请输入狗的年龄:5
请输入狗的品种:中华田园犬
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:白菜   
请输入狗的定价:15
请输入狗的年龄:3
请输入狗的品种:中华田园犬
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:3
*************欢迎来到狗狗大厅*************
名字	价格	年龄	品种
小黄	100.00	3	金毛
小菜	1000.00	2	马尔济斯
巧巧	500.00	2	阿拉斯加
大黄	10.00	5	中华田园犬
白菜	15.00	3	中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:
1
*************欢迎来到种类之家*************
请输入你想要查看的一种狗狗种类:中华田园犬
名字	价格	年龄	品种
大黄	10.00	5	中华田园犬
白菜	15.00	3	中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:2
*************欢迎来到身价之家*************
请输入你想要查看的最低身价:10
请输入你想要查看的最高身价:50
名字	价格	年龄	品种
大黄	10.00	5	中华田园犬
白菜	15.00	3	中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:4
*************欢迎来到契约之家*************
请输入你要签订契约的狗狗姓名:白菜	
名字	价格	年龄	品种
白菜	15.00	3	中华田园犬
购买成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:3
*************欢迎来到狗狗大厅*************
名字	价格	年龄	品种
小黄	100.00	3	金毛
小菜	1000.00	2	马尔济斯
巧巧	500.00	2	阿拉斯加
大黄	10.00	5	中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:0
后台狗释放成功

二、思维导图
数据结构链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值