您的位置:首页 > 其它

单链表的初始化,建立,插入,查找,删除

2011-06-19 22:55 609 查看
001
////////////////////////////////////////////
002
//单链表的初始化,建立,插入,查找,删除。//
003
//Author:WangYong//
004
//Date:2010.8.19//
005
////////////////////////////////////////////
006
007
008
#include<stdio.h>
009
#include<stdlib.h>
010
011
typedef
int
ElemType;
012
////////////////////////////////////////////
013
014
//定义结点类型
015
typedef
struct
Node
016
{
017
ElemTypedata;
//单链表中的数据域
018
struct
Node*next;
//单链表的指针域
019
}Node,*LinkedList;
020
021
////////////////////////////////////////////
022
023
//单链表的初始化
024
025
LinkedListLinkedListInit()
026
{
027
Node*L;
028
L=(Node*)
malloc
(
sizeof
(Node));
//申请结点空间
029
if
(L==NULL)
//判断是否有足够的内存空间
030
printf
(
"申请内存空间失败/n"
);
031
L->next=NULL;
//将next设置为NULL,初始长度为0的单链表
032
}
033
034
////////////////////////////////////////////
035
036
//单链表的建立1,头插法建立单链表
037
038
LinkedListLinkedListCreatH()
039
{
040
Node*L;
041
L=(Node*)
malloc
(
sizeof
(Node));
//申请头结点空间
042
L->next=NULL;
//初始化一个空链表
043
044
ElemTypex;
//x为链表数据域中的数据
045
while
(
scanf
(
"%d"
,&x)!=EOF)
046
{
047
Node*p;
048
p=(Node*)
malloc
(
sizeof
(Node));
//申请新的结点
049
p->data=x;
//结点数据域赋值
050
p->next=L->next;
//将结点插入到表头L-->|2|-->|1|-->NULL
051
L->next=p;
052
}
053
return
L;
054
}
055
056
////////////////////////////////////////////
057
058
//单链表的建立2,尾插法建立单链表
059
060
LinkedListLinkedListCreatT()
061
{
062
Node*L;
063
L=(Node*)
malloc
(
sizeof
(Node));
//申请头结点空间
064
L->next=NULL;
//初始化一个空链表
065
Node*r;
066
r=L;
//r始终指向终端结点,开始时指向头结点
067
ElemTypex;
//x为链表数据域中的数据
068
while
(
scanf
(
"%d"
,&x)!=EOF)
069
{
070
Node*p;
071
p=(Node*)
malloc
(
sizeof
(Node));
//申请新的结点
072
p->data=x;
//结点数据域赋值
073
r->next=p;
//将结点插入到表头L-->|1|-->|2|-->NULL
074
r=p;
075
}
076
r->next=NULL;
077
078
return
L;
079
}
080
081
////////////////////////////////////////////
082
083
//单链表的插入,在链表的第i个位置插入x的元素
084
085
LinkedListLinkedListInsert(LinkedListL,
int
i,ElemTypex)
086
{
087
Node*pre;
//pre为前驱结点
088
pre=L;
089
int
tempi=0;
090
for
(tempi=1;tempi<i;tempi++)
091
pre=pre->next;
//查找第i个位置的前驱结点
092
Node*p;
//插入的结点为p
093
p=(Node*)
malloc
(
sizeof
(Node));
094
p->data=x;
095
p->next=pre->next;
096
pre->next=p;
097
098
return
L;
099
}
100
101
////////////////////////////////////////////
102
103
//单链表的删除,在链表中删除值为x的元素
104
105
LinkedListLinkedListDelete(LinkedListL,ElemTypex)
106
{
107
Node*p,*pre;
//pre为前驱结点,p为查找的结点。
108
p=L->next;
109
while
(p->data!=x)
//查找值为x的元素
110
{
111
pre=p;
112
p=p->next;
113
}
114
pre->next=p->next;
//删除操作,将其前驱next指向其后继。
115
free
(p);
116
return
L;
117
}
118
119
/////////////////////////////////////////////
120
121
int
main()
122
{
123
LinkedListlist,start;
124
/*printf("请输入单链表的数据:");
125
list=LinkedListCreatH();
126
for(start=list->next;start!=NULL;start=start->next)
127
printf("%d",start->data);
128
printf("/n");
129
*/
printf
(
"请输入单链表的数据:"
);
130
list=LinkedListCreatT();
131
for
(start=list->next;start!=NULL;start=start->next)
132
printf
(
"%d"
,start->data);
133
printf
(
"/n"
);
134
135
int
i;
136
ElemTypex;
137
printf
(
"请输入插入数据的位置:"
);
138
scanf
(
"%d"
,&i);
139
printf
(
"请输入插入数据的值:"
);
140
scanf
(
"%d"
,&x);
141
LinkedListInsert(list,i,x);
142
for
(start=list->next;start!=NULL;start=start->next)
143
printf
(
"%d"
,start->data);
144
printf
(
"/n"
);
145
printf
(
"请输入要删除的元素的值:"
);
146
scanf
(
"%d"
,&x);
147
LinkedListDelete(list,x);
148
for
(start=list->next;start!=NULL;start=start->next)
149
printf
(
"%d"
,start->data);
150
printf
(
"/n"
);
151
152
return
0;
153
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: