1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| #include "doubleLinkList.h" #include <stdbool.h> #include <string.h> #include <time.h>
DListNode *createTestList(int *arr, int size) { DListNode *head = (DListNode *)malloc(sizeof(DListNode)); head->data = 0; head->prev = NULL; head->next = NULL;
DListNode *pmove = head; for (int i = 0; i < size; i++) { DListNode *newNode = (DListNode *)malloc(sizeof(DListNode)); newNode->data = arr[i]; newNode->prev = pmove; newNode->next = NULL; pmove->next = newNode; pmove = newNode; head->data++; }
return head; }
bool verifyDoubleLinkList(DListNode *list) { if (!list) return false;
DListNode *pmove = list->next; while (pmove) { if (pmove->prev->next != pmove) return false; pmove = pmove->next; }
pmove = list; while (pmove->next) pmove = pmove->next; while (pmove != list) { if (pmove->prev->next != pmove) return false; pmove = pmove->prev; }
return true; }
bool testInit() { printf("测试初始化功能:\n"); bool allPassed = true;
printf(" 测试创建空链表: "); DListNode *list = createTestList(NULL, 0); bool result = (list->data == 0 && list->next == NULL); printf("%s\n", result ? "通过" : "失败"); allPassed &= result; destoryDoubleLinkList(list);
printf(" 测试创建单节点链表: "); int arr[] = {1}; list = createTestList(arr, 1); result = (list->data == 1 && verifyDoubleLinkList(list)); printf("%s\n", result ? "通过" : "失败"); allPassed &= result; destoryDoubleLinkList(list);
return allPassed; }
bool testInsert() { printf("测试插入功能:\n"); bool allPassed = true;
int arr[] = {1, 2, 3}; DListNode *list = createTestList(arr, 3);
printf(" 测试头部插入: "); insert(list, 0, 0); bool result = (list->next->data == 0 && verifyDoubleLinkList(list)); printf("%s\n", result ? "通过" : "失败"); allPassed &= result;
printf(" 测试尾部插入: "); insert(list, 4, list->data); result = (list->data == 5 && verifyDoubleLinkList(list)); printf("%s\n", result ? "通过" : "失败"); allPassed &= result;
destoryDoubleLinkList(list); return allPassed; }
bool testErase() { printf("测试删除功能:\n"); bool allPassed = true;
int arr[] = {1, 2, 3, 4}; DListNode *list = createTestList(arr, 4);
printf(" 测试头部删除: "); earse(list, 0); bool result = (list->next->data == 2 && verifyDoubleLinkList(list)); printf("%s\n", result ? "通过" : "失败"); allPassed &= result;
printf(" 测试尾部删除: "); earse(list, list->data - 1); result = (list->data == 2 && verifyDoubleLinkList(list)); printf("%s\n", result ? "通过" : "失败"); allPassed &= result;
destoryDoubleLinkList(list); return allPassed; }
void runAllTests() { printf("============== 双向链表测试 ==============\n");
bool initTestPassed = testInit(); bool insertTestPassed = testInsert(); bool eraseTestPassed = testErase();
printf("\n============== 测试结果汇总 ==============\n"); printf("初始化测试: %s\n", initTestPassed ? "通过" : "失败"); printf("插入操作测试: %s\n", insertTestPassed ? "通过" : "失败"); printf("删除操作测试: %s\n", eraseTestPassed ? "通过" : "失败"); printf("总体结果: %s\n", (initTestPassed && insertTestPassed && eraseTestPassed) ? "全部通过" : "存在失败"); }
void test01() { DListNode *dlist = initDoubleLinkList(); traverseDoubleLinkeList(dlist);
earse(dlist, -7); traverseDoubleLinkeList(dlist);
destoryDoubleLinkList(dlist); }
int main() { runAllTests(); return 0; }
|