数据结构--单链表c语言实现
2014-11-03 23:38
537 查看
List.h如下:
List.c如下:
#ifndef __LIST_H #define __LIST_H typedef struct Node { int data; struct Node *next; }Node, *List; void InitList(List list); bool Insert_Head(List list, int val); bool Insert_Tail(List list, int val); Node *Search(List list, int key); Node *SearchPre(List list, int key);//查找key的前驱 bool Delete(List list, int key); int Length(List list);//返回链表的数据节点个数 void Show(List list); void Destroy(List list);//删除list所有数据节点 #endif
List.c如下:
#include "List.h" #include <stdlib.h> #include <assert.h> #include <stdio.h> static Node *BuyNode(int val) { Node *p = (Node*)malloc(sizeof(Node)); assert(p != NULL); p->data = val; p->next = NULL; return p; } void InitList(List list) { assert(list != NULL); list->next = NULL;//(*list).next = NULL; } bool Insert_Head(List list, int val) { //Node node;//error //node.data = val; //node.next = list->next; //list->next = &node; Node *p = BuyNode(val); p->next = list->next; list->next = p; return true; } bool Insert_Tail(List list, int val) { Node *p = list; while (p->next != NULL) { p = p->next; } p->next = BuyNode(val); return true; //p=list->next;//NULL //while(p!=NULL) //{ // p = p->next; //} //p++; } Node *Search(List list, int key) { for (Node *p = list->next; p != NULL; p = p->next) { if (p->data == key) { return p; } } return NULL; } Node *SearchPre(List list, int key)//查找key的前驱 { for (Node *p = list; p->next != NULL; p = p->next) { if (p->next->data == key) { return p; } } return NULL; } bool Delete(List list, int key) { Node *p = SearchPre(list, key); if (p == NULL) { return false; } Node *q = p->next; p->next = q->next; free(q); //free(p->next);//error //p->next = p->next->next; return true; } int Length(List list)//返回链表的数据节点个数 { int count = 0; for (Node *p = list->next; p != NULL; p = p->next) { count++; } return count; } void Show(List list) { for (Node *p = list->next; p != NULL; p = p->next) { printf("%d ", p->data); } printf("\n"); } void Destroy(List list)//删除list所有数据节点 { while (list->next != NULL) { Node*p = list->next; list->next = p->next; free(p); } /* Node *p = list->next; Node *q; list->next = NULL; while(p!=NULL) { q = p->next; free(p); p = q; } */ }
相关文章推荐
- 数据结构C语言之单链表简单实现
- 数据结构c语言实现之单链表的应用
- 数据结构C语言单链表的实现和几点注意的问题
- 数据结构中单链表的实现+单链表的C语言实现源代码
- 【数据结构】数据结构C语言的实现(单链表)
- 数据结构C语言实现系列——线性表
- 《数据结构》中的哈希表实现的例子(C语言)
- C语言实现数据结构中的链栈
- C语言实现数据结构中的链队列
- 顺序表的链式结构中用C语言实现单链表的交并差运算
- 单链表操作演示----C语言实现
- 数据结构C语言实现系列——线性表
- C语言实现数据结构中的顺序表
- 数据结构的Java实现——单链表
- 关于数据结构的10个面试题(c语言实现)
- 链表的C语言实现之单链表的实现
- 数据结构C语言实现系列——线性表
- C语言实现数据结构中的循环链表
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列