数据结构笔记一 线性表

来源:互联网 发布:滇红58淘宝 编辑:程序博客网 时间:2024/06/10 09:52



     以前数据结构没学好,现在从新操刀数据结构,一步一步走好。今天学了数据结构的最简单的一种:线性表




线性表,顾名思义,不用看书都知道是数据呈线性排列,一个接一个,虽然逻辑结构简单,但是实际的物理存储还是有区别的:线性表存储有两种方式,顺序结构存储和链式结构存储


    先看看顺序存储结构,就是在内存中是一个接一个顺序存放的,访问和修改可以用数组的方式进行,我们把这个结构定义为:
#define MAXSIZE 100;
typedef struct{
listdata[MAXSIZE];
        int len;}
为了重用的灵活性,这里listdata在主函数中定义,len为线性表的当前数据个数


然后就是操作线性表的函数了:


初始化线性表:
void init_list(list * p_list)
{
p_list->len = 0;
}


判断线性表是否为空:
int if_list_empty(list * p_list)
{
return(p_list->len == 0);
}


寻找下标为i的元素并读取值:
int search_listdata_by_i(list * p_list,int i,data *e)
{
if(i < 0 || i > p_list->len - 1 )
    return 0;
*e = p_list->listdata[i];
return 1;
}
通过给定的值寻找下标:
int search_i_by_listdata(list * p_list,data *e)
{
int i;
for(i = 0;i <= p_list->len;i++)
     if(p_list->listdata[i] == *e)
      return i;
return -1;
}


插入:
int insert_to_list(list * p_list,data *e,int i)
{
int j;
if(i < 0 || i > p_list->len - 1)
    return 0;
for(j = p_list->len;j >= i;j--)
     p_list->listdata[j+1] = p_list->listdata[j];
p_list->len++;
p_list->listdata[i] = *e;
return 1;
}
删除某个元素:


int del_from_list(list * p_list,int i)
{
int j;
if(i < 0 || i > p_list->len - 1 || if_list_empty(p_list))
    return 0;
for(j = i; j <= p_list->len; j++)
     p_list->listdata[j] = p_list->listdata[j + 1];
p_list->len--;
return 1;
}


返回数组长度和清空线性表:
int return_len(list * p_list)
{
return p_list->len;
}
int clear_list(list * p_list)
{
p_list->len = 0;
}
这段代码好处就是可以重用,所以写成一个.h头文件也可以。代码很简单,没什么很难理解的地方。




还有链表,这个要麻烦点了,因为链表分很多种了,单链表,循环链表,双链表等,总之呢就是在数据结构的定义里面改一下就是了:
typedef struct nudo{
data nudodata;
struct nudo * next;
}* p_nudo;


至于操作的函数嘛,也是很简单的,知道了原理,操作还会远吗?



原创粉丝点击