程序小白天天打卡

2018/1/24

数据结构

1.不知道为什么,卡在线性表这里有个几天了,对线性表的顺序结构有了一定的认识,关键是处理线性表的时候,要把它当做数组来处理;

2.线性表和数组的很大一个不同就是:线性表是从1开始的,而数组是由0开始的,操作的时候要注意;

3.说一说线性表顺序存储的优缺点吧;

1.优点:

 无需表示表中元素之间的逻辑关系而增加额外的存储空间,可以很快存储任意位置的元素(O(n)最优情况O(1));

2.缺点:

 1.插入和删除操作要移动大量的元素,

 2.由于在线性表中Maxsize和length在一开始就确定了,难以确定存储空间的容量

 3.造成存储空间的碎片

线性表的一些操作可以和switch case函数联动,使操作便捷(代码为转载代码)

/*线性表功能的实现*/
#include<stdio.h>
#pragma warning(disable:4996)
//定义常量 存储空间的初始化分配
#define MAXSIZE 20
#define TRUE 1
#define ERROR -1
#define FALSE 0
#define OK 1

//用typedef定义类型
typedef int Status;
typedef int ElemType;
//定义一个结构体类型
typedef struct {
	ElemType data[MAXSIZE];
	int length;
} SqList;

//初始化函数
Status initList(SqList *L) {
	L->length = 0;
	return OK;
}

//返回线性表的长度
Status getListLength(SqList L) {
	return L.length;
}

//线性表为空返回true,否则返回false
Status listEmpty(SqList L) {
	if (L.length == 0) {
		return TRUE;
	}
	return FALSE;
}

//线性表清空,长度为0 
Status clearList(SqList *L) {
	L->length = 0;
	return OK;
}
//获取指定的元素的值,返回下标为i - 1的元素,赋值给e
Status getElem(SqList L, int i, ElemType *e) {
	//判断元素位置是否合法[i]
	if (i > L.length || i < 1) {
		printf("查找的位置不正确 \n");
		return ERROR;
	}
	//判断线性表是否为空
	if (listEmpty(L)) {
		return ERROR;
	}
	*e = L.data[i - 1];
	return OK;
}

//在线性表中查找指定的e相等的元素,如果查找成功,返回该元素的下标,否则返回ERROR
Status locateElem(SqList L, ElemType e) {
	int i;
	for (i = 0; i < L.length - 1; i++) {
		if (L.data[i] == e) {
			return i;
		}
	}
	printf("没有查找到元素 %d 指定的下标\n", e);
	return ERROR;
}

//自动创建 MAXSIZE 个元素,并赋值为0 
Status createList(SqList *L) {
	int i;
	for (i = 0; i < 10; i++) {
		L->data[i] = 0;
	}
	L->length = 10;
	return OK;
}

//在线性表中第i个位置前插入新元素e 
Status listInsert(SqList *L, int i, ElemType e) {
	//判断长度是否可以允许插入新的数据 
	if (L->length >= MAXSIZE) {
		printf("空间已满,不能再插入数据\n");
		return FALSE;
	}
	//判断插入位置的合法性
	if (i < 1 || i > L->length) {
		printf("插入位置不正确\n");
		return FALSE;
	}
	int j;
	for (j = L->length - 1; j >i-1; j--) {
		L->data[j] = L->data[j - 1];
	}
	L->data[i - 1] = e;
	L->length++;
	return TRUE;
}

//删除线性表中第i个元素,成功后表长减1,用e返回其值 
Status deleteList(SqList *L, int i, ElemType *e) {
	//判断线性表是否为空
	if (listEmpty(*L)) {
		return ERROR;
	}
	//判断删除的位置是否合法
	if (i < 1 || i > L->length) {
		printf("删除位置不合法\n");
		return ERROR;
	}
	*e = L->data[i - 1];
	for (i; i < L->length; i++) {
		L->data[i - 1] = L->data[i];
	}
	L->length--;
	return TRUE;
}

//遍历线性表
Status listTraverse(SqList L) {
	int i;
	for (i = 0; i < L.length; i++) {
		printf("%d ", L.data[i]);
	}
	printf("\n");
	return OK;
}

//主程序
int main(void) {
	SqList L;
	ElemType e;
	initList(&L);
	int option = 1;
	int input_number;
	int res;
	ElemType input_value;
	printf("\n1.遍历线性表 \n2.创建线性表 \n3.清空线性表 \n4.线性表插入 \n5.查找表中元素 \n6.判断元素是否在表中 \n7.删除某个元素 \n8.线性表长度\n9.线性表是否为空\n0.退出 \n请选择你的操作:\n");
	while (option) {
		scanf("%d", &option);
		switch (option) {
		case 0:
			return OK;
			break;
		case 1:
			listTraverse(L);
			break;
		case 2:
			createList(&L);
			listTraverse(L);
			break;
		case 3:
			clearList(&L);
			listTraverse(L);
			break;
		case 4:
			printf("请输入插入的位置:");
			scanf("%d", &input_number);
			printf("\n");
			printf("请输入插入的值:");
			scanf("%d", &input_value);
			printf("\n");
			listInsert(&L, input_number, input_value);
			listTraverse(L);
			break;
		case 5:
			printf("请输入要查找的位置:");
			scanf("%d", &input_number);
			printf("\n");
			getElem(L, input_number, &input_value);
			listTraverse(L);
			printf("第%d个元素的值为:%d\n", input_number, input_value);
		
			break;
		case 6:
			printf("请输入要查找的元素:");
			scanf("%d", &input_value);
			printf("\n");
			res = locateElem(L, input_value);
			if (res != ERROR) {
				printf("值为%d在表中的第%d个位置\n", input_value, input_number);
			}
			break;
		case 7:
			printf("要删除第几个元素?");
			scanf("%d", &input_number);
			printf("\n");
			deleteList(&L, input_number, &input_value);
			listTraverse(L);
			break;
		case 8:
			res = getListLength(L);
			printf("线性表的长度是:%d", res);
			break;
		case 9:
			res = listEmpty(L);
			if (res) {
				printf("线性表的是空的");
			}
			else {
				printf("线性表的是不是空的");
			}
			break;
		}
	}
	return OK;
}

)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值