#include #include "list.h" #include "queue.h" #include "hash_table.h" typedef struct test { int val1; float val2; } test_t; void handle(void *data) { test_t *test = (test_t *) data; printf("val1:%d, val2:%f\n", test->val1, test->val2); } int compare_int(const void *s1, const void *s2) { test_t *data1 = (test_t *) s1; int *data2 = (int *) s2; return (data1->val1 - *data2); } int compare_int_sort(const void *s1, const void *s2) { test_t *data1 = (test_t *) s1; test_t *data2 = (test_t *) s2; return (data1->val1 - data2->val1); } void print(List_t *list) { printf("list len = %ld\n", list_get_lenth(list)); if (!list_is_empty(list)) { //test list_reverse list_traverse(list, handle); } else { printf("\tthe list is empty\n"); } } int Test_List(void *pVoid) { List_t list; list_init(&list); // 初始化链表 test_t test1 = {10, 10.5}; test_t test2 = {20, 20.5}; test_t test3 = {30, 30.5}; test_t test4 = {40, 40.5}; test_t test5 = {50, 50.5}; // 测试插入操作 printf("------insert(_at_tail)----\n"); list_insert(&list, &test1); // 在尾部插入test1 list_insert(&list, &test2); // 在尾部插入test2 list_insert(&list, &test3); // 在尾部插入test3 print(&list); // 打印链表 // 测试删除操作 printf("------delete----\n"); list_delete(&list, &test1.val1, compare_int); // 删除值为test1.val1的节点 print(&list); // 打印链表 // 测试在头部插入操作 printf("------insert_at_head----\n"); list_insert_at_head(&list, &test4); // 在头部插入test4 print(&list); // 打印链表 // 测试在指定位置插入操作 printf("------insert_at_index(2)----\n"); list_insert_at_index(&list, &test5, 2); // 在索引2处插入test5 print(&list); // 打印链表 // 测试链表反转操作 printf("------reverse----\n"); list_reverse(&list); // 反转链表 print(&list); // 打印链表 // 测试搜索操作 int key = 20; test_t *ret; printf("------search----\n"); ret = list_search(&list, &key, compare_int); // 搜索值为key的节点 printf("%d:%f\n", ret->val1, ret->val2); // 打印搜索结果 key = 50; ret = list_search(&list, &key, compare_int); // 搜索值为key的节点 printf("%d:%f\n", ret->val1, ret->val2); // 打印搜索结果 // 测试获取指定位置元素操作 printf("------list_get_element----\n"); ret = list_get_element(&list, 2); // 获取索引为2的元素 printf("%d:%f\n", ret->val1, ret->val2); // 打印获取的元素 ret = list_get_element(&list, 3); // 获取索引为3的元素 printf("%d:%f\n", ret->val1, ret->val2); // 打印获取的元素 // 测试排序操作 printf("-----sort----\n"); list_sort(&list, compare_int_sort); // 按照整数值排序 print(&list); // 打印排序后的链表 // 测试销毁操作 printf("-----destroy----\n"); list_destroy(&list, NULL); // 销毁链表 return 0; } int Test_Queue(void *pVoid) { Queue_List_t *deque = newQueue_List(sizeof(int)); // 创建一个int类型的双端队列 // 测试入队操作 int val1 = 10; pushFirst(deque, &val1); // 将10插入队首 char val2 = 'A'; pushLast(deque, &val2); // 将字符'A'插入队尾 // 测试出队操作 int *popVal1 = (int *) popFirst(deque); // 从队首出队 char *popVal2 = (char *) popLast(deque); // 从队尾出队 // 打印出队的值 printf("Pop value from front: %d\n", *popVal1); printf("Pop value from rear: %c\n", *popVal2); float val3 = 10.5; pushFirst(deque, &val3); // 将10.5插入队首 double val4 = 20.5; pushLast(deque, &val4); // 将20.5插入队尾 float *popVal3 = (float *) popFirst(deque); // 从队首出队 double *popVal4 = (double *) popLast(deque); // 从队尾出队 printf("Pop value from front: %f\n", *popVal3); printf("Pop value from rear: %lf\n", *popVal4); int nums[] = {10, 20, 30, 40, 50}; // 测试入队操作 for (int i = 0; i < 5; i++) { pushFirst(deque, &nums[i]); // 将数组元素插入队首 } // 测试出队操作 int *popVal; for (int i = 0; i < 5; i++) { popVal = (int *) popFirst(deque); // 从队首出队 printf("Pop value from front: %d\n", *popVal); } delQueue_List(deque); return 0; } int Test_Hash(void* pVoid) { Hash_Table_t* ht = ht_new(); ht_insert(ht, "name", "lydxh"); ht_insert(ht, "age", "18"); printf("Name:%s\nAge:%s", ht_search(ht, "name"), ht_search(ht, "age")); ht_delete(ht, "name"); ht_delete(ht, "age"); ht_del_hash_table(ht); return 0; }