【C语言】 单链表的实现 用malloc实现的动态内存管理
来源:互联网 发布:实体渠道 数据分析 编辑:程序博客网 时间:2024/06/04 19:51
链表是我们初学者经常接触到的数据结构,和顺序表相比,它节省了空间,在插入的时候节省了时间。
单链表每个节点由数据和指向下一个节点的指针构成。头部由一个head节点,尾部指针指向NULL。
如图所示:
而用malloc实现,就是需要插入一个节点的时候在开辟空间存放此节点。
代码实现如下:
头文件.h:
#pragma once#define __SEQ_LIST__#ifdef __SEQ_LIST__#include <stdio.h>#include<malloc.h>#include<assert.h>typedef int DateType;typedef struct Node{DateType date;struct Node* next;}Node, *PLinkList;void InitList(PLinkList* pplist);//初始化void PrintList(PLinkList list);//打印int GetLength(PLinkList list);//数据存入长度void PushBack(PLinkList* ppList, DateType x);//尾插void PushFront(PLinkList* ppList, DateType x);//头插void PopBack(PLinkList* ppList);void PopFront(PLinkList* ppList);Node* Find(PLinkList pList, DateType x);void Insert(PLinkList* ppList, Node* n, DateType x);int Remove(PLinkList* ppList, DateType x);void Erase(PLinkList* ppList, Node* n);#endif;
cpp文件:
#include "LIST.h"PLinkList CreateNode(DateType x)//开辟空间{PLinkList tmp = (PLinkList)malloc(sizeof(Node));tmp->date = x;tmp->next = NULL;return tmp;}void InitList(PLinkList* pplist){assert(pplist);*pplist = 0;}void PrintList(PLinkList list)//打印{PLinkList begin = list;while (begin != NULL){printf("%d ", begin->date);begin = begin->next;}}int GetLength(PLinkList list)//数据存入长度{int count = 0;PLinkList begin = list;while (begin != NULL){count++;begin = begin->next;}return count;}void PushBack(PLinkList* ppList, DateType x)//尾插{assert(ppList);if (*ppList == NULL){*ppList = CreateNode(x);}else{PLinkList begin = *ppList;PLinkList tmp = CreateNode(x);begin->next = tmp;//******..tmp->next = NULL;}}void PushFront(PLinkList* ppList, DateType x)//头插{if (*ppList == NULL){*ppList = CreateNode(x);}else{PLinkList tmp = CreateNode(x);tmp->next = *ppList;*ppList = tmp;}}void PopBack(PLinkList* ppList){PLinkList end, pre;assert(ppList);end = *ppList;if (*ppList == NULL){printf("List is NULL");}else{while (end->next != NULL){pre = end;end = end->next;}free(end);end->next = NULL;}}void PopFront(PLinkList* ppList){assert(ppList);if (*ppList == NULL){printf("List is NULL");}else{PLinkList tmp = *ppList;*ppList = (*ppList)->next;free(tmp);}}Node* Find(PLinkList pList, DateType x){Node* tmp;PLinkList P = pList;while (P->next != NULL){if (P->date == x){tmp = (Node*)P->date;printf("%d\n", P->date);return tmp;}else{return -1;}}}
部分测试代码:
int main(){PLinkList s;InitList(&s);PushBack(&s, 6);PushFront(&s, 7);PushFront(&s, 1);PopFront(&s);GetLength(s);printf("Length: %d\n", GetLength(s));Find(s, 7);PrintList(s);getchar();return 0;}
和测试代码相关的截图:
0 0
- 【C语言】 单链表的实现 用malloc实现的动态内存管理
- C语言内存管理:malloc、calloc、free的实现
- C语言内存管理:malloc、calloc、free的实现
- C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存
- 模拟实现c语言中的动态内存分配malloc函数
- C语言中内存的动态管理——malloc和free
- C语言动态内存管理malloc、calloc、realloc、free的用法和注意事项
- 数据结构——栈的动态实现(malloc/free)(C语言实现)
- 动态内存分配及Malloc/free的实现
- 浅析动态内存分配及Malloc/free的实现
- 浅析动态内存分配及Malloc/free的实现
- 浅析动态内存分配及Malloc/free的实现
- 浅析动态内存分配及Malloc/free的实现
- 链表的C语言实现(含动态内存分配)
- 链表的C语言实现之动态内存分配
- 链表的C语言实现之动态内存分配
- 链表的C语言实现(含动态内存分配)
- C语言实现一个动态内存的顺序表
- 2016sdau课程练习专题一 1006 problemG
- Glide与OkHttp3集成
- winscp
- 正则表达式,验证文件上传类型
- Top 125 Network Security Tools
- 【C语言】 单链表的实现 用malloc实现的动态内存管理
- 那些年你用过的工具--网络工具Wireshark经验谈
- IOS实现一个简单的浏览器
- (2010计本3班-杨蒙)面向对象的C--实现链表操作
- oracle数据库各版本下载地址
- adb shell input text 输入特殊字符 &
- 《嵌入式开发》实验项目
- 宏:整数常量 O_ACCMODE
- awk 删除文本文件换行符