您的位置:首页 > 理论基础 > 数据结构算法

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: