OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

查看: 271|回复: 1

Linux下数据结构学习笔记

[复制链接]

  离线 

15

主题

128

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2017-11-13
在线时间
27 小时
发表于 2017-11-15 10:16:40 | 显示全部楼层 |阅读模式
001
一、顺序表

002
    使用数组实现

003
    优点:查找快,可以使用下标定位

004
    缺点:增加、删除慢,之后的所有元素需要移动

005

006
    结构体定义方式1:

007
        需要malloc创建数组

008
        typedef struct seqlist{

009
            //数组指针,使用malloc动态创建堆上的数组

010
            data_t *buf;

011
            //数组长度

012
            int maxLen;

013
            //list最后元素的位置

014
            int last;

015
        }seqlist_t;

016
    结构体定义方式2:

017
        这种方式可以使用定义变量的方式创建结构体,分配在栈上

018
        也可以用malloc创建,分配在堆上

019
        在malloc创建结构体或者定义变量时,系统根据结构体内元素的顺序,自动赋值对应的内存地址以初始化

020

021
        typedef struct seqlist{

022
            data_t buf[N];

023
            int maxLen;

024
            int last;

025
        }seqlist_t;

026

027
    常用方法:

028
        //创建

029
        seqlist_t *create_seqList(int size){

030
            seqlist_t *l = (seqlist_t *)malloc(sizeof(seqlist_t));

031
            l->buf = (data_t *)malloc(sizeof(data_t) * size);

032
            l->maxLen = size;

033
            l->last = -1;

034
        }

035
        //清空

036
        void clear_seqlist(seqlist_t *l);

037
        //判满

038
        int is_full_seqlist(seqlist_t *l);

039
        //判空

040
        int is_empty_seqlist(seqlist_t *l);

041
        //打印

042
        void show_seqlist(seqlist_t *l);

043
        //插入

044
        int insert_seqlist(seqlist_t *l, int pos, data_t num);

045
        //删除

046
        data_t delete_seqlist(seqlist_t *l, int pos);

047
        //定位

048
        int index_of_seqlist(seqlist_t *l, data_t target);

049
        //反转

050
        void reverse_seqlist(seqlist_t *l){

051
            int i = 0;

052
            while(i < (l->last + 1)/2){

053
                l->buf ^= l->buf[l->last - i];

054
                l->buf[l->last - i] ^= l->buf;

055
                l->buf ^= l->buf[l->last - i];

056
                i++;

057
            }

058
        }

059

060
二、链表

061
    使用指针将各个节点连接实现

062
    优点:增加、删除快,直接改变指针的指向即可

063
    缺点:查找慢,只能遍历

064
   

065
    结构体定义方式:

066
        typedef struct link_node{

067
            //节点数据

068
            data_t data;

069
            //下个节点指针

070
            struct link_node * next;

071
        }linknode_t;

072
        

073
    常用方法:

074
        //创建

075
        linklist_t create_linklist(){

076
            //创建链表头,不存放数据

077
            linklist_t l = (linklist_t)malloc(sizeof(linklist_t));

078
        }

079
        

080
        //判空

081
        int is_empty_linklist(linklist_t l);

082
        //打印

083
        void show_linklist(linklist_t l);

084
        //插入

085
        int insert_linklist(linklist_t l, int pos, data_t data){

086
            //malloc创建节点

087
        }

088
        //删除

089
        int delete_linklist_node(linklist_t l, data_t data){

090
            //解链

091
            //free

092
        }

093
        //反转

094
        void reverse_linklist(linklist_t l){

095
            linknode_t *p = l->next;

096
            l->next = NULL;

097
            linknode_t *q;

098

099
            while(p){

100
                q = p->next;

101
                p->next = l->next;

102
                l->next = p;

103
                p = q;

104
            }

105
        }


更多内容尽在:http://www.superedu.com.cn/?op321

回复

使用道具 举报

  离线 

24

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
546
金钱
546
注册时间
2013-12-14
在线时间
109 小时
发表于 2017-11-15 11:02:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-1-23 18:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */