【链表6】<最新>链表(link list)

链表的内存大小是动态的。当一个链表被创建时,如果没有存储任何内容,我们则希望这个链表最好不占用内存空间。 链表的节点可以自由删减。当我们需要向链表中存入一个数据时,这个链表的内存可以被动态增加以用于存放数据。当我们需要将链表中的某一个节点删除,这个链表的内存可以被动态地释放,防止无故坏死的内存块存在。 链表中的数据可以被检索,遍历。当我们需要在链表中查询某个元素的时候,链表可以快速地响应。 链表中的数据可以被快速插入。当我们需要向链表中某一个位置插入一个数据时,这个数据节点可以被快速地插入,而不需要像线性表一样,对整体数据进行移位,因为这会远远加重程序的时间复杂性。
typedef struct Node{int data;struct Node *next;} Node_t;Node_t *node;
node_t *ll_pt;ll_pt = (node_t *)malloc(sizeof(node_t));






#include<stdio.h>#include<stdlib.h>/*声明一个链表节点*/typedef struct NODE{ int data; struct NODE *next;}node_t;
node_t * ll_init(void);node_t* ll_append(node_t *list, int data);int ll_seek(node_t *list);int ll_delete(node_t *list);
int main(void){ node_t *ll_pt = NULL; ll_pt = ll_append(ll_pt, 1000); ll_pt = ll_append(ll_pt, 2000); ll_pt = ll_append(ll_pt, 3000); ll_pt = ll_append(ll_pt, 4000); ll_pt = ll_append(ll_pt, 5000); ll_pt = ll_append(ll_pt, 6000); ll_pt = ll_append(ll_pt, 7000);
ll_seek(ll_pt); printf("\n Before free %d", ll_pt -> data); ll_delete(ll_pt); printf("\n After free %d", ll_pt -> data); return 0;}int ll_delete(node_t *list){ node_t *p, *pr; p = list; while(p != NULL) { pr = p; p = p -> next; free(pr); } return 1;}int ll_seek(node_t *list){ node_t *p; p = list; int i; while(p != NULL) { printf("%d:%d | ", i, p -> data); p = p -> next; i ++; } return 1;}node_t* ll_append(node_t *list, int data){ node_t *p = NULL, *head, *pr; head = list; p = (node_t *)malloc(sizeof(node_t)); if(p == NULL) { /*申请返回NULL,申请错误*/ } if(list == NULL) //如果此时的List为NULL,则对List进行初始化 { head = p; head->data = data; head->next = NULL; } else //否则,就追加新的节点 { pr = head; while(pr->next != NULL) //找到最后一个节点 { pr = pr -> next; } pr->next = p; //当前的next指针指向新节点 p->data = data; p->next = NULL; //新节点的next指针指向NULL } return head;}
赞 (0)
