第三章第一小节(数组实现表)

利用数组实现表的操作,包括创建一个表,删除表,插入元素,删除元素,查找元素等。。。

//用数组实现表的结构
//包括创建表makeList,删除表 makeEmpty,插入表 insertList,删除表 deleteList,查找元素findKth(),打印表printList();

#define NotFind -1
typedef int element; 
typedef struct List* Qlist;

Qlist createList(); //创建表
void makeEmpty(Qlist list); // 删除表,释放内存
void insertList(Qlist list, element x); //插入元素
void deleteList(Qlist list, element x);	// 删除元素
void deleteListPos(Qlist list, element pos);//删除元素,pos为删除元素的位置
int find(Qlist list, element x); // 根据值查找元素,返回元素的下标
int findKth(Qlist list, int pos); //根据位置查找元素,返回元素的值
void printList(Qlist list);	//打印表的内容
int IsEmpty(Qlist list); // 判断表是否为空

//表的数据结构
struct List{
	element data[100];	//存放数据
	int count;		//记录以存放的个数
	int maxCount;	//表的数据容量
};
//创建表,并将表中的内容赋为0
Qlist createList() {
	Qlist list = (Qlist)malloc(sizeof(List));
	memset(list,0,sizeof(List));
	list->maxCount = 100;
	return list;
}

//判断是否为空
int IsEmpty(Qlist list) {
	if (list == NULL)
		return 1;
	return 0;
}
//删除表
void makeEmpty(Qlist list) {
	if(!IsEmpty(list)){
		free(list);
	}
}

//插入元素
void insertList(Qlist list, element x) {
	//插入表为空
	if (IsEmpty(list)) {
		cout << "插入表为null" << endl;
		return;
	}
	//表中数据已满
	if (list->count == list->maxCount) {
		cout << "表中数据已满" << endl;
		return;
	}

	//插入数据,数据按从小到大排列,寻找插入位置
	int i = 0;
	for (i; i < list->count; i++) {
		if (x < list->data[i]) {
			break;
		}
	}
	//后面的数据依次挪一格
	for (int j = list->count; j > i; j--) {
		list->data[j] = list->data[j - 1];
	}
	list->data[i] = x;
	list->count++;
}

//删除元素,按元素值
void deleteList(Qlist list, element x) {
	int kth = find(list,x); //得到元素的位置
	if (kth == NotFind) {
		cout << "删除失败" << endl;
		return;
	}
	else {
		for (int i = kth; i < list->count; i++) {
			list->data[i] = list->data[i + 1];
		}
		list->count--;
		cout << "删除成功" << endl;
	}
}

//删除元素,按位置
void deleteListPos(Qlist list, element pos) {
	int kth = findKth(list,pos);
	if (kth == NotFind) {
		cout << "删除失败";
		return;
	}
	deleteList(list, kth);
}

//查找元素(按元素值),若存在返回下标,不存在则返回-1
int find(Qlist list, element x) {
	//表为空
	if (IsEmpty(list)) {
		cout << "查找表为null" << endl;
		return NotFind;
	}
	int i = 0;
	for (i; i < list->count; i++) {
		if (x == list->data[i])
			return i;
	}
	return NotFind;
}

//查找元素(按位置),若存在返回值,不存在则返回-1
int findKth(Qlist list, int pos) {
	if (IsEmpty(list)) {
		cout << "查找表为null" << endl;
		return NotFind;
	}
	if (0 <= pos && pos < list->count) {
		return list->data[pos];
	}
	return NotFind;
}

//打印表中的元素
void printList(Qlist list) {
	if (IsEmpty(list))
		return;
	int k = 0;
	for (int i = 0; i < list->count; i++) {
		cout << list->data[i] << " ";
		k++;
		if (k % 5 == 0) {
			cout << endl;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值