像int一样都是类型的变量;他是定义的一个结构体指针,没有早携赋值时指向NULL;赋值后指向一个结构体地址;其功能是吧结构体关联起来,从本结构体可以找到下一个结构体。(就好像我这保清睁灶存着你的地址,我可以找到你,你又知道别人的地址,我通过你就可以找到别人。)next也可以说只是答扮个名,便于我们直观的认识他的功能和意义。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、虚拟主机、营销软件、网站建设、大通网站维护、网站推广。
/*看不过竖和去这些误人子弟的回答
你这么肯定island a={"a","7","9",NULL};这样分配不行?
他程序的宏轮问题出在:
1、a.next=c;
c.next=i;
i.next=s;
这种赋值语句应该放在函数内部,不应该在函数外部,所以编译器会提示
找不到{ ,即这些语句应该在函数体内。
把这3句放到 main 函数体内就没问题了。
2、dis函数
for (; i=!NULL; i-next) 改为 for (; i!=NULL; i=i-next)
printf("name:%s\n open:%s-%s",i-name,i-open,i-close );改为:
printf("name:%s open:%s-%s\n",i-name,i-open,i-close );在最后换行
修改余绝盯后的程序如下:
*/
#include stdio.h
typedef struct island
{
char *name;
char *open;
char *close;
struct island *next;
/* data */
}island;
island a={"a","7","9",NULL};
island c={"c","17","19",NULL};
island i={"i","9","17",NULL};
island s={"s","9","17",NULL};
void dis(island *start)
{
island *i=start;
for (; i!=NULL; i=i-next)
{
printf("name:%s open:%s-%s\n",i-name,i-open,i-close ); /* code */
}
}
int main(void)
{
a.next=c;
c.next=i;
i.next=s;
dis(a);
}
在函数中不是有q-next=p;这时q是插入前的尾节点。那样q的的下一个(新插入的节点)就由q指向节点里的字段next指向了。
单链表的插入只需让s-next 和p-next的指针做一点改变即可。
s-next = p-next;
p-next = s;
单链表第i个数据插入结点的算法思路是:
1、声明一个指针p指向链表的第一个结点,初始化j从1开始;
2、当j i 时,遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;
3、若到链表则液末尾p为空,说明第i个元素不存在;
4、否则查找成功,在系统中生成一个空结点s;
5、将数据元素e赋值给s-data;
6、单链表的插入标准语句 s-next = p-next; p-next = s;
7、返回成功。
扩展资料
单链表的建立有头插法、尾插法两种方法。
1、头插法
单链表是用户不断申请存储单元和改变链接皮腊关系而得到的一种特殊数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。
链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。
2、尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头指针固定不动,故必须设立一个搜索指针,向链表右边延伸孙握物,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是头结点。