c语言数据结构(4)
2016-04-07 21:04
344 查看
链表是数据结构的另一种存储结构,也就是链式存储结构,在链式存储结构中,元素被分成了数据域和指针域,数据域存放这个元素存储的数据,指针域存放这指向下一个结点的指针,这样存放的话,就必须有一个头指针指向第一个结点,也就是头结点(如果有头结点的话),一般头结点的数据域为空,或者是存放着整个链表的长度.头结点可有可无,但是头指针是必须的.
简单的链表实现操作:
typedef struct node
{
elemtype data;
struct node *next;
}node;
typedef struct node *linklist; //类型linklist为结构型指针node
获取链表中元素的操作:
int getelem(linklist l,int i,elemtype *e)
{
int j;
linklist p;
p=l->next;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p || j>i) //链表压根就没有i长度或者是第i个元素根本不存在
return 0;
*e=p->data;
return 1;
}
主要的思路就是让定义好的指针编历链表,让指针在确定的数据域停下并赋值给指针,在遇某些特殊情况时候报错,在链表中,表长是不确定的,所以在对内容的编辑上只能采用移动指针的方法来实现对数据的操作
下面是链表的插入操作,在链表中,我们想要实现插入操作,可以通过改变指针的指向来实现,像是这样
我们想要在ai和ai+1之间插入e,设ai指针域是p,则ai+1是p->next,e的指针域是s,插入操作如下
int eleminstrt (linklist *l,int i,elemtype e)
{
int j;
linklist p,s;
p=*l;
j=1; //定义j主要是为了找到第i个结点,这在许多的链表结构中都会用到
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p || j<i)
return 0;
s=(linklist) malloc(sizeof (node)); //malloc函数,向系统需求括号内的空间,返回值是void型的指针,申请失败则返回null型指针,这里我们直接类型转换成linklist型的结构指针
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
简单的链表实现操作:
typedef struct node
{
elemtype data;
struct node *next;
}node;
typedef struct node *linklist; //类型linklist为结构型指针node
获取链表中元素的操作:
int getelem(linklist l,int i,elemtype *e)
{
int j;
linklist p;
p=l->next;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p || j>i) //链表压根就没有i长度或者是第i个元素根本不存在
return 0;
*e=p->data;
return 1;
}
主要的思路就是让定义好的指针编历链表,让指针在确定的数据域停下并赋值给指针,在遇某些特殊情况时候报错,在链表中,表长是不确定的,所以在对内容的编辑上只能采用移动指针的方法来实现对数据的操作
下面是链表的插入操作,在链表中,我们想要实现插入操作,可以通过改变指针的指向来实现,像是这样
我们想要在ai和ai+1之间插入e,设ai指针域是p,则ai+1是p->next,e的指针域是s,插入操作如下
int eleminstrt (linklist *l,int i,elemtype e)
{
int j;
linklist p,s;
p=*l;
j=1; //定义j主要是为了找到第i个结点,这在许多的链表结构中都会用到
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p || j<i)
return 0;
s=(linklist) malloc(sizeof (node)); //malloc函数,向系统需求括号内的空间,返回值是void型的指针,申请失败则返回null型指针,这里我们直接类型转换成linklist型的结构指针
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
相关文章推荐
- 链表-Linked List Cycle II(判断一个链表是否有环)
- C语言和数据结构的书单-再次推荐
- 数据结构双向循环链表的C语言实现(插入,查询,删除)
- 【数据结构与算法】LCA
- 顺序结构存储串实现串通配符匹配的算法
- 第17章 二叉树,堆和优先队列(1/3)
- 哈希表处理冲突的方法
- 【动态树】【Link Cut Tree】动态树的理解(入门)
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 在Hive 中如何使用符合数据结构 maps,array,structs
- 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 数据结构与算法——二叉查找树类的C++实现
- 6.2 相关数据结构及其创建
- linux内核链表以及list_entry--linux内核数据结构(一)
- 利用Mat数据结构打开摄像头
- 深入学习STL第二级配置器
- SGI特殊的空间配置器 std::alloc
- STL六大组件
- 关联式容器set和map原理
- Javascript数据结构与算法---数组