说到链表,从大一就开始折腾,不复杂的一个东西愣是到现在也没好好实现过。说到底是自己执行力太低了。准备考研也有一段时间了,数据结构看了也有一段时间,该写点代码了。
链表没什么好说的,概念和方法都很简单,就直接贴代码吧,下面的实现是带头结点的。想了下,C++自己太半桶水了,还是老实用C吧,等初试完了再好好看看C++.
LinkList.h
#ifndef LINKLIST_H_INCLUDED #define LINKLIST_H_INCLUDED typedef int ElemType; struct Node; typedef struct Node* PtrToNode; typedef PtrToNode LinkList; typedef PtrToNode Position; LinkList L_creatList(); void L_destroyList(LinkList list); void L_makeEmpty(LinkList list); void L_insert(Position pos, ElemType elem); void L_delete(LinkList list, ElemType elem); Position L_find(LinkList list, ElemType elem); /* Locate the previous node for delete method */ Position L_findPre(LinkList list, ElemType elem); int L_isEmpty(LinkList list); /* routine for test */ void L_printList(LinkList); //PtrToNode L_header(LinkList list); #endif // LINKLIST_H_INCLUDED
implementation is in the source file LinkList.c
#include <assert.h> #include <stdlib.h> #include <stdio.h> #include "LinkList.h" typedef struct Node { ElemType data; PtrToNode next; }Node; LinkList L_creatList() { LinkList L; L = malloc(sizeof(Node)); /* Check the alloction */ assert(L != NULL); L->next = NULL; return L; } Position L_find(LinkList list, ElemType elem) { Position p = list->next; while(p != NULL){ if(p->data == elem) return p; p = p->next; } /* Not found */ return NULL; } Position L_findPre(LinkList list, ElemType elem) { Position pre = list; Position cur = pre->next; while(cur != NULL){ if(cur->data == elem) return pre; pre = pre->next; cur = pre->next; } return NULL; } /* Insert the Node after the position */ void L_insert(Position pos, ElemType elem) { Position tmp = malloc(sizeof(Node)); assert(tmp != NULL); tmp->data = elem; tmp->next = NULL; tmp->next = pos->next; pos->next = tmp; } int L_isEmpty(LinkList list) { return list->next == NULL; } void L_delete(LinkList list, ElemType elem) { Position pre = L_findPre(list, elem); if(pre != NULL){ Position tmp = pre->next; pre->next = tmp->next; free(tmp); } } void L_makeEmpty(LinkList list) { LinkList L = list; Position tmp; while(L->next != NULL){ tmp = L->next; L->next = tmp->next; free(tmp); } } void L_destroyList(LinkList list) { L_makeEmpty(list); free(list); } /* This routine just for test */ void L_printList(LinkList list) { LinkList L = list->next; while(L != NULL){ printf("%d ", L->data); L = L->next; } printf("\n"); }
之后几天把基本的数据结构补齐,就可以写写基本的算法了,包括之前写的排序,准备再用C实现下。
原文链接: https://www.cnblogs.com/leavingQ/archive/2012/04/08/2437209.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/46454
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!