2024年4月30日发(作者:)
维普资讯
电脑知识与技术 ......数据库与信息管理.
C中用指针动态建立单链表的几种方法
廖远来
(河源职业技术学院信息技术系,广东河源517000)
摘要:通常用数组可以实现线性表的顺序存储,但是,数组事先要定义固定的长度,并且所分配的存储空间是连续的。这样一来,就不
能达到真正意义上的动态分配存储空间以及充分利用存储空间的目的;另外,用数组不利于实现线性表中结点的动态增加与删除。而用
链袁则可以弥补以上不足。本文主要以建立学生信息链表为例,分别介绍无头结点、有头结点单链表的逆序建立和顺序建立过程以及算
法实现。
关键词:指针:链表:单链表;动态建立
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2006)23-0022-02
LIAO Yuang——lai
Several Methods of Dynamic Construction of Sole Chain List by Needle within C Programming Language
(Heyuan Polytechnic,Heyuan 517000,China)
Abstract:Ordinarily,order storage of linear tables can be realized through arrays.However,each array must previously be assigned given
length and the storage spaces distributed are succe ̄ive.As,of coume,can t fully reach the aims of dynamic distribution of storage spaces and
completely utilize them.Moreover,it s not in favor of realizing the dynamic adding and deletion of node in linear tabls by uesing arrays.In—
stead,the shortages can be covered when using chain lists.Mainly based on the coustrucfion of students
duces the process of disorder and order construction of node sloe chain istl.
information chains,the artide intro-
Key WOrdS:needle;chain list;sole chain ilst;dynamic construction
1链表概要
链表概念:链表是线性表的链式存储结构的实现。特点是用
一
mt p;
P=&b:
组任意的存储单元存储线性表的数据元素(这组存储单元可以
是连续的也可以是不连续的)。为了表示每个数据元素ai与其直
接后继数据元素ai+l之间的逻辑关系,对数据元素ai来说,除了
存储其本身的信息,还需存储一个指示其直接后继的信息(直接
后继的存储位置)。这两部分信息组成一个结点,它包括两个域:
其中存储数据元素信息的域称为数据域;存储直接后继存储位置
的域称为指针域。指针域中存储的信息称做指针或链。
单链表概念:每个结点中都只有一个指针域的链表称为单链
表。
 ̄ntf(“%d”, p);
这就有一种逻辑上的指向关系.1003指向1003所在的存储
单元习惯上说P指向b存储单元。由于通过地址能找到所需的变
量单元,我们可以说,地址“指向”该变量单元。因此C语言中,将
地址形象化地称为“指针”。
3 C中单链表的表示
在C语言中可用“结构指针”来描述单链表。
Struet lnode
2指针概念的引出
我们知道内存是按字节编址的,即每一个字节的存储单元都
有其固定的物理地址。我们所说的“地址”就是这个物理地址。C程
序中,我们定义的变量、数组、和函数等,都要在内存中分配一个
存储空间。每一个存储空间由若干个字节组成,一个存储空间的
“地址”指的是该空间中第一个字节的地址。这样以来。形式上,我
{
elemtype date;//定义结点类型
struet lnode next:
,/定义该结点类型的指针用于指向下一个结点
};
Struet lnode*head;
本文有关建立链表的实例都采用以下定义:
以建立学生信息链表为例,假设一个学生信息包括:学号,
姓名.量化分¥/
struet lnode
们可以通过定义的变量名或地址访问系统分配给变量的存储空
间。(直接访问)
假设编译时系统分配给变量a,b的存储单元如图:
1003
1004
1005
l006
■
{
int xuehao; 学号¥/
char name[20]; 姓名 /
lfoat score; 量化分¥/
struet lnode next;
int a'b=6;
Scanf(“%d”,&a);
Prin “%d%d”,a,b);
实际上,上例中的用变量名a,b将这两个变量所对应的存储
空间里的值打印出来,最终编译系统也要将变量名跟物理地址联
系起来,归结为通过地址取出a,b所在存储空间里的值.再打印
出来。
};
struet lnode*head, p; 定义该结点类型的头指针变量head,
指向新结点的指针变量p*/
4动态建立无头结点的单链表
4.1逆序建立过程
为了打印出b的值可不可以先将b变量的地址放到另一变
量中,然后通过另一变量去取出b的值打印出来呢?答案是肯定
的(问接访问)。
收稿日期:2006-05-19
4.1.1无头结点单链表的逆序建立过程图
(1)准备链接第1个结点的情形
P-next=head; 将head里面的值放新结点的指针域里面¥/
作者简介:廖远来(1979一),男,江西石城人,广东省河源职业技术学院信息技术系教师,研究方向:计算机软件与理论、程序设计语言。
22 电-知识与技术
.
维普资讯
维普资讯
电脑知识与技术
的逼近目标函数。
......网络通讯与安全..
tem Symposium,Himshima,PP.529-532,1992.
参考文献:
[1 1I.C.Bezdek,Pattern Recognition with Fuzzy Objective
Function Algorithms,Plenum Press,New York,1981.
『51M.Mizumoto and M.1wakii,SeIrf-feneration of fuzzy rules by
fuzzy singleton-type reasoning method,Proc.Of the 9th Fuzzy
System Symposium,Sapporo,PP.585-588,1993.
【21R.L.Cannon,J.V.Daveand and J.C.Bezdek,E珩cient
implementation of the fuzzy c-means clustering algorihms,IEEE t
Transactions on Pattern Analysis and Machine Intelligence,Vo1.8,
No.2,PP.248-255,1986.
【61M.Mizumoto,Fuzzy controls by fuzzy singleton type easroning
method,Pmc.Of the 5th IFSA Congress,Seoul,Vo1.I1,PP.945—
948,1993.
【71Y.Shi,M.Mizumotom,N.Yubazaki and M.Otnia,A learning
lgoraithm for tuning fuzzy tulles based on the gradient descent
method,Pmc.Of the 5th IEEE International Conference on Fuzzy
【3IR.N.Dave and S.K.Bhaswan,Adaptive fuzzy c—sheU
clustering,Proc.Of the 10th Annual North American Fuzzy
Information Processing Society Meeting(NAFIP 91),Columbia,PP.
195一l99.1991.
Systems(FUZZ-IEEE 96),New Orleans,USA,Vo1.1,PP.55-61,1996.
【817=士同.神经模糊系统及其应用【M】.北京航空航天大学出版
社.1998.
【41M.Mizumoto,Improvement of fuzzy contolrs(、rI),一Case by
uzzy sifngleton-type reasoning method-,Proc.Of the 8th Fuzzy Sys—
【9】赵振宇,徐用懋.模糊理论和神经网络的基础与应用【M】.清
华大学出版社,1996.
(上接第23页)
5.1.2逆序建立带头结点的单链表的程序实现
struct lnode*ncreatelistO
{struct lnode head, p;
char numstr[20】;
head=(struct lnode )malloc(sizeof(stuctr lnode));
为头结点开辟空间¥,
head一>next=null;
do
5.2.2顺序建立带头结点的单链表的程序实现
struct lnode sceatrelist0
{struct lnode head, , 1;
char numstr[20];
head=(stuctr lnode )malloc(sizeof(struct lnode)); 为头结点开
辟空间 ,
head->next=null; ,
{p=(struct lnode )malloc(sezeof(struct lnode));
为新结点开辟空间 ,
gets(numstr);p->xuehao=atoi(numsn.;
gets(p一>name);
gets(numstr);p->score=atof(numstr);
if(p->xuehao!=o1
/*if语句使最后学号为0的结点不连到链表上 ,
将结点逆序链到头结点后面 ,
{p->next=head->next;
head->next=p;
l=head;/*L为增设的用于链接后续结点的指针变量.首先指
向头结点¥,
do
{p=(struct lnode )malloc(ezseof(stuctr lnode));
为新结点开辟空间 ,
gets(numstr1;p->xuehao=atoi(numstr);
gets(p一>name);
gets(numstr);p->score=atof(numstr);
I 一>xuehao!=0)/*if语句使最后学号为0的结点不连到链表
上¥,
}
}while(p->xuehao!=0); 当学生学号为0时结束链表的建立
过程¥,
将结点逆序链到头结点后面 ,
{p一>next=1一>next;
1->next=p;
1=p;
etrurn0aead);
}
5.2顺序建立过程
5.2.1顺序建立带头结点的单链表过程图
(1)准备链接第一个结点的情形
p一>next=L一>next;
L->next=p;
}
}while(p->xuehao!=0); 当学生学号为0时结束链表的建立
过程 ,
return(head);
}
L:p;/*L为增设的用于链接后续结点的指针变量 ,
………
①………~
参考文献:
【l】谭浩强.地址和指针概念【J】.C程序设计(第二版),1999.10
_l!
L p
(2)链接第一个结点后的情形
(1):201-202.
【2】谭浩强,张基温,唐永炎.指针概述[J】.C语言程序设计教程
(第二版),1998.6(1):178—184.
【3】黄明和,周定康,谢旭升,李云清.带头结点的链表[J].数据结
构.1998.2(4):22.
【4】严蔚敏,吴伟明.线性表的链式表式和实现【J】.数据结构,
1999.2(3):27-30.
【5】谭浩强.用指针处理链表阴.C程序设计(第二版),1999.11
L p
(3)链上一个结点后,并且开辟了一个新的结点空间的情形
102 啦细识与技术
(7):273-277.
【61i1 ̄,张基温,唐永炎.动态存储分配——链表阴.C语言程
序设计教程(第二版).1998.7(6);255—265.
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714421079a2443165.html
评论列表(0条)