利用数组实现表的操作,包括创建一个表,删除表,插入元素,删除元素,查找元素等。。。
//用数组实现表的结构
//包括创建表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;
}
}
}