线性表的链式实现
2008-03-23 16:10:20 / 个人分类:C/C++编程
这学期开了数据结构这门课。对于学软件工程的学生来讲,认真、切实的学好它是非常必要的。LUPA开源社区gO2?sl
[IdqN#h
最近一次上机时,我把线性表的链式形式实现了,但还存在很多问题,希望大家能给我指点一二。
}2{3}#G/xk d!I)Z0$cat include.h
,rhC-vb%S2A(].~0#include <stdio.h>
(t(Vn#sn!D[#yZ?0#include <stdlib.h>
Vtj1N%vd/o0#include <malloc.h>
vBd)]7X0#include <string.h>
yv
t7Y(_x@{0
JL6P#Ur0$cat Status.h
6|&k,FGf9AI#J0#define TRUE 1
A;}#b]0G~hO0#define FALSE 0LUPA开源社区'H#fm+m*is
#define OK 1LUPA开源社区De\8Zt9T}6gL
#define ERROR 0
3_e%S
],^/t6f j0#define INFESIBLE -1LUPA开源社区1wlRmwf4b
#define OVERFLOW -2
typedef int Status;
3q%e;Q
Y3Nj
E2g/r0
F{6D e{3h0$cat struct.hLUPA开源社区z${Sq0f:kE4INB
#include "include.h"
5EqFhpO)t0#include "Status.h"
typedef struct Node{LUPA开源社区b;FY@P
int data;
\7](V!F+F9Xb%sv0 struct Node *next;LUPA开源社区@x2u-MR mk
}LNode,*LinkList;LUPA开源社区*OP1C2H}-M8KqC
LUPA开源社区gn4N]-L;x7wY
$cat Linearlist.c
+ZNJ3RqU P0LUPA开源社区m$}n'mM
LinkList InitList();
s8I_RC'J#J"s\0void DestroyList(LinkList L);
3kz2f B
Bz0LinkList Clearlist(LinkList L);
p{%b"h$g0Status ListEmpty(LinkList L);
1B/r| iu;MNJ-mIk0int ListLength(LinkList L);LUPA开源社区9ZbP[\3R
LNode GetElem(LinkList L,int i);LUPA开源社区(xf x9GCW$h
Status Compare(LinkList p,LNode e);LUPA开源社区$i[,l`g)[&L.L
int LocatElem(LinkList L,LNode e);
+X%L,p1G8R7_0LinkList PriorElem(LinkList L,LNode e);LUPA开源社区NG|c'AO;r1I;cT5u
LinkList NextElem(LinkList L,LNode e);LUPA开源社区3Jy6} I+X,N~7l,X
LinkList ListInsert(LinkList L,int locate,LNode e);LUPA开源社区3^)nd%b M L
LinkList InsertHead(LinkList L,LNode e);LUPA开源社区G:k2Onv
LinkList InsertTail(LinkList L,LNode e);LUPA开源社区*DoY%y`:]
dJ
void Vist(LinkList p);LUPA开源社区 D7Z;o6oTj6e6k
void ListTraverse(LinkList L);
LinkList InitList()LUPA开源社区!k9O+_
T.{zj M
{
Up}S^0 LinkList L;
d"F^}FW} a&p0 L=(LinkList)malloc(sizeof(LNode));
Z3C)}N^/e:{0 if(L==NULL)
z/U-l*A]bD,Fwh0 {
_:Tt e9K{#M$HP0 printf("Creat L point fail!\n");LUPA开源社区:?'J|o(h
exit(1);
+Z;i? Z!n} z0 }
]?k'?P&A QuzM0 L->data=0;LUPA开源社区A!{"@ M(s|
L->next=NULL;
?`qO~H&q#I*T0 return L;LUPA开源社区+ym6zxz5O%{4z B.r
}
\3Y
l{}L$BL],R0void DestroyList(LinkList L)LUPA开源社区#D"T-EmHwZ'zs
{
c
},mB"?-~}0 LinkList p;LUPA开源社区2~0c5Pc`@
for(p=L->next;p!=NULL;p=p->next)
5a/w8b
V4O3z~0 {
$`.v2M F)y0 L->next=NULL;LUPA开源社区Kmj-b`c
free(L);
!TK `S
p0 L=p;
B7mAQg)r0 }
XF0`7ztzl1B8F0}LUPA开源社区v:uI3b Mn"~:?
I&n t8_
LinkList Clearlist(LinkList L)LUPA开源社区"M]
e#V2kP
{LUPA开源社区"x?pd~8|3C
LinkList p;LUPA开源社区%k5CT+?D7_
for(p=L->next;p!=NULL;p=p->next)
3g7xvl*\YN
eY7lP0 p->data=0;
!@ jZy\*Q4x0 return L;LUPA开源社区HNrdIYxwA!C
}
5n!HQ%h(X;N3dF9g0Status ListEmpty(LinkList L)LUPA开源社区tX0p(}7ws0R[
{
8~CW3H?b5?0 Status status;LUPA开源社区,xX4xN&i3w*b0W
if(L->data==0)
SYJ&Az
l2rz0 status=TRUE;
ZyF%L`3rer
E,^0 else LUPA开源社区FNJ:w
^\x/T
status=FALSE;LUPA开源社区@8q,lxmO
return status;
[1T}q({0} LUPA开源社区/W6X#Yd*X'^5gpdV
int ListLength(LinkList L)LUPA开源社区
a9Z:p&y
l/Vd1q
{
#~v$wh.rx0k0 return L->data;LUPA开源社区&r}'A.D;wq5{
}
)y,H,p8v(N0LNode GetElem(LinkList L,int i)
*[!CE
k
a^S0{
Osk[P8j:Z/C*R0 LNode s;
0kp
aIb,Z3j
Dx0 LinkList p;LUPA开源社区mD-U&f9z;y4F/Y
int j;
2J!R[Q;xM-^5t0 if(i<1||i>ListLength(L))
@9McG'SCs!p0 {
MT;V#C"y)L^0 printf("%d don't exit in the lenght.\n",i);LUPA开源社区r4F&dq$?(H5E9t Yj
exit(1);LUPA开源社区X2P4d9\.vX/B6c
}LUPA开源社区&Ya?F~zL(L
else LUPA开源社区,D5XT#X[U?*Vh
{
t E0G%ydv~0 for(j=1,p=L->next;j<i;p=p->next,j++)
H1T
u$nnJ0 ;
,sM#{Z8h.J0 s.data=p->data;
B7jT3Bbx0 }
K7Na
A[0 return s;LUPA开源社区?
K#verK"`
u
}LUPA开源社区ljR(J_7{!k(]
Status Compare(LinkList p,LNode e)LUPA开源社区x
\kvh
m h
{LUPA开源社区.n4B(I
[{5FSr
Status status;
Vmz5V"C]`0 if(p->data==e.data)LUPA开源社区'x5]T,E7Xex+n
status=TRUE;LUPA开源社区5D;N
j$WC1Zt%L
else
AU#qB}-Y0 status=FALSE; LUPA开源社区S:W^qW,w;gD_
x
return status;
E~Du2_p-mLf0}
U;Rk1TeAC7w0int LocatElem(LinkList L,LNode e)
-`Br].tN0{LUPA开源社区 n9g
AP.?_N!|%V
Status s;
-F%S5p0|4I\&D0 LinkList p;LUPA开源社区:ziRI{/V
int locate;
FP$P W2Dc1c0 int i;
lD*I|!\0 for(i=0,p=L;i<ListLength(L);i++,p=p->next)LUPA开源社区
ynFvG5D
{
BOJO\u&W&D0 if((s=Compare(p,e))==FALSE)
4T2}zIhed2J-a0 continue;LUPA开源社区-c7u/GOb/cD
else
Bh @$ktK.f0 {
[4r%a3J#w*k]0 locate=i;LUPA开源社区fzL.J d
Z\O
l
break;
;R-Fk2@ H+W0S0 }LUPA开源社区.|!t/\Ud6f
}LUPA开源社区'qSEi` _nC
if(i>=ListLength(L))LUPA开源社区(v5lTV5|d
t[
{LUPA开源社区i)IQ$@"Sq L
printf("%d don't exit in the LinkList.\n",e.data);
?@-u5x"QHqzD*Q0 exit(1);
_Z#J[3DS0 }
!{y6R~?0Kgz}R-P
h'[0 return locate;LUPA开源社区-Rk-n1`5[L5j)K3R Q
}LUPA开源社区
e[7|Tv
LinkList PriorElem(LinkList L,LNode e)
*L}E?u E+N)nb0{LUPA开源社区rln"V2GdA
LinkList p=NULL;LUPA开源社区n4@1D9Z|dt\
}
int locate;
~^G.Qo0 int i;LUPA开源社区%|/L7^+|AU/b
locate=LocatElem(L,e);LUPA开源社区;Lgp
H+WP$m
U
if(locate==0||locate==1)LUPA开源社区:O&g
el.lj+Y
{LUPA开源社区Z&~E2_V?gi}
/*printf("PriorElem:locate=%d",locate);*/
,u4v)s5p5L+x|0 p=L->next;LUPA开源社区F%M2i(Y
v
}
bw|/Z"ds.ni2q0 else LUPA开源社区
v/xkJ
H]k @`
{
6ry:aJH#]3tc4W0 for(i=1,p=L->next;i<locate-1;p=p->next,i++)
VN:QB"{e W~0 ;
0}:O#f!l@g0 }
Q.r&CdD,z{+D1I"e0 return p;
3^Q+q@gf` p6b*`0}
XXgAYl`4y0LinkList NextElem(LinkList L,LNode e)
$O"Sd F*N
`+Ou2{0{
"E0c(@ };k"L0 LinkList p=NULL;LUPA开源社区hG._9U h2YigC-b%gJ
int locate;LUPA开源社区t@*e[.OE7z*s j
int i;
m,g-J6Fg:S3S}
Fh0 locate=LocatElem(L,e);