数据结构学习(1)-链表
来源:互联网 发布:sql怎么删除列 编辑:程序博客网 时间:2024/06/10 09:35
最近在学习数据结构,最先看了几天书,啥的没看懂,什么链表,堆栈,树,一塌糊涂。没办法把书丢一边,过了一段时间,又看了一点清华大学的严蔚敏的数据结构,恍然大悟。原来链表就是用指针把他们给串起来。早说啊,搞得我这么暝是苦想这么久。
那我就先贴个代码,(先声明代码不是我原创,是一位叫Kyle Loudon的大神写的)是单向链表的代码
先是list.c
#include <stdlib.h>
#include <string.h>
#include "list.h"
/*
*********************************************************************************************************
*函数名:list_init()
*功能说明:初始化链表
*形参:
*返回值:
*********************************************************************************************************
*/
void list_init(List *list,void (*destory)(void *data))
{
list->size=0;
list->destory=destory;
list->head=NULL;
list->tail;
return;
}
/*
*********************************************************************************************************
*函数名:list_destroy()
*功能说明:消除链表
*形参:
*返回值:
*********************************************************************************************************
*/
void list_destory(List *list)
{
void *data;
while(list_size(list)>0)
{
if(list_rem_next(list,NULL,(void **)&data)==0&&list->destory!=NULL)
{
list->destory(data);
}
}
memset(list,0,sizeof(List));
return;
}
/*
*********************************************************************************************************
*函数名:list_ins_next()
*功能说明:将一个元素插入链表
*形参:
*返回值:
*********************************************************************************************************
*/
int list_ins_next(List *list,ListEmlt *element,const void *data)
{
ListEmlt *new_element;
if((new_element=(ListEmlt *)malloc(sizeof(ListEmlt)))==NULL)
{
return -1;
}
new_element->data=(void *)data;
if (element==NULL)
{
if (list_size(list)==0)
list->tail=new_element;
new_element->next=list_head;
list->head=new_element;
}
else
{
if (element->next==NULL)
{
list_tail=new_element;
}
new_element->next=element;
element->next=new_element;
}
list->size++;
return 0;
}
/*
*********************************************************************************************************
*函数名:list_init()
*功能说明:将一个元素移除链表
*形参:
*返回值:
*********************************************************************************************************
*/
int list_rem_next(List *list,ListEmlt *element,void **data)
{
ListEmlt *old_element;
if (list_size(list)==0)
{
return -1;
}
if (element==NULL)
{
*data=list->head->data;
old_element=list->head;
list->head=list->head->next;
if (list_size(list)==NULL)
{
list->tail=NULL;
}
}
else
{
*data=element->next->data;
old_element=element->next;
element->next=element->next->next;
if (element->next==NULL)
{
list->tail=element;
}
}
free(old_element);
list->size--;
return 0;
}
然后是list.h
#ifndef LISH_H
#define LISH_H
#include <stdlib.h>
typedef struct ListElmt_
{
void *data;
struct ListElmt_ *nest;
}ListEmlt;//一个元素的单位
typedef sturct List_
{
int size;
int (*mtch)(cost void *key1,const void *key2);//不是链表本身的使用,是链表数据结构派生的新类型使用
void (*destory)(void *data);//destory是封装之后的传递给List_init的析构函数
ListEmlt *head;
List *tail;
}List//定义一个链表的结构体
void list_Init(List *list,void (*destory)(void *data));
void list_destory(list *list);
int list_ins_nest(List *list,ListEmlt *element,const void *data);
int list_rem_nest(List *list,ListElmt *element,void **data);
#define list_size(list) ((list)->head)
#define list_head(list) ((list)->tail)
#define list_tail(list) ((list)->tail)
#define listz_is_head(list,element) ((element)==(list)->head?1:0)
#define list_is_tail(element) ((element)->next==NULL?1:0)
#define list_data(element) ((element)->data)
#define list_nest(element) ((element)->next)
#endif
对,我就是一个抄代码的,鄙视我的请左转出门不送。
- 数据结构学习(1)-链表
- 数据结构学习(1)
- 数据结构学习笔记(1) 数据结构概论
- 数据结构学习记录-链表1
- 数据结构学习-绪论(1)
- 数据结构学习-递归(1)
- 数据结构学习笔记(1)
- 数据结构学习笔记(1)
- 《数据结构》学习笔记(1)
- 数据结构和算法学习(5)-链表
- 0513学习总结(数据结构,链表)
- 数据结构学习- 链表
- 数据结构学习笔记-链表
- 【数据结构学习】-链表
- 数据结构学习一:链表
- 数据结构学习_树(1)
- 学习WinDbg - (1)查看内核数据结构
- 数据结构学习笔记(1)算法分析
- Java学习_01:字符串(String)
- 矩阵
- Win10系统右键添加绿色版Atom编辑器的打开方式
- multipart/form-data格式上传文件
- java中Class.forName的作用浅谈
- 数据结构学习(1)-链表
- Vbs脚本
- ubuntu下不加index.php无法正常访问
- ffmpeg AV转换常用命令
- ThinkPHP 学习每日总结
- bootstrap 样式查阅参考文档
- JAVA编程训练——Game: connect four
- android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系
- 《Java虚拟机原理图解》 1.1、class文件基本组织结构