小学期第一天学习了一点链表的知识,想通过CSDN记录一下。(有不足的地方请多多指教)
1.创建链表:
//创建链表 link* buildLink(int num) { link* head = (link*)malloc(sizeof(link)); link* temp = head; for (int i = 1; i <= num; i++) { link* a = (link*)malloc(sizeof(link)); a->element = i; a->next = NULL; temp->next = a; temp = temp->next; } return head; }
2.输出链表:
//输出链表 void printLink(link* p) { link* temp = p; while (temp->next != NULL) { temp = temp->next; //头节点没有数据域 printf("%d ", temp->element); } printf("n"); }
3.查询链表中元素位置:
//查询元素在链表中的位置 int selectElem(link* p, int key) { link* temp = p; int counter = 0; while (temp->next) { temp = temp->next; counter++; if (temp->element == key) { return counter; //返回元素所在位置 } } return -1; //没有查询到key }
4.修改num位置的元素为element:
//修改num位置的元素为element void amendElem(link* p, int num,int element) { link* temp = p; for (int i = 0; i < num; i++) { temp = temp->next; } temp->element = element; }
5.新增节点:
//新增节点 void addElem(link* p,int num, int element) { link* temp = p; //先找到新增节点位置前一个节点 for (int i = 1; i < num; i++) { if (!temp->next) { printf("error indexn"); return; } temp = temp->next; } link* new_elem = (link*)malloc(sizeof(link)); new_elem->next = temp->next; temp->next = new_elem; new_elem->element = element; }
6.删除节点:
//删除节点 int delElem(link* p, int elem) { link* temp = p; link* temp0 = p; while (temp->next) { temp0 = temp; //temp0保存前一个节点的信息 temp = temp->next; //temp保存要删除节点的信息 if (elem == temp->element) { temp0->next = temp->next; free(temp); return 1; } } return -1; //没有找到elem }
7.测试用例:
int main() { link* link0 = buildLink(6); printLink(link0); delElem(link0, 4); printLink(link0); addElem(link0, 5, 100); amendElem(link0, 1, 10); printLink(link0); int flag = selectElem(link0, 2); if (flag != -1) printf("2 is the %d number in the link0.", flag); else printf("failing to find 2 in the link0."); //flag == 0 return 0; }
8.输出结果: