c 语言 链表
来源:互联网 发布:淘宝巴克110 编辑:程序博客网 时间:2024/05/22 10:46
////////////////////////////////////////////
002
//单链表的初始化,建立,插入,查找,删除。//
005
////////////////////////////////////////////
006
007
008
#i nclude <stdio.h>
009
#i nclude <stdlib.h>
010
011
typedef
int
ElemType;
012
////////////////////////////////////////////
013
014
//定义结点类型
015
typedef
struct
Node
016
{
017
ElemType data;
//单链表中的数据域
018
struct
Node *next;
//单链表的指针域
019
}Node,*LinkedList;
020
021
////////////////////////////////////////////
022
023
//单链表的初始化
024
025
LinkedList LinkedListInit()
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
LinkedList LinkedListCreatH()
039
{
040
Node *L;
041
L = (Node *)
malloc
(
sizeof
(Node));
//申请头结点空间
042
L->next = NULL;
//初始化一个空链表
043
044
ElemType x;
//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
LinkedList LinkedListCreatT()
061
{
062
Node *L;
063
L = (Node *)
malloc
(
sizeof
(Node));
//申请头结点空间
064
L->next = NULL;
//初始化一个空链表
065
Node *r;
066
r = L;
//r始终指向终端结点,开始时指向头结点
067
ElemType x;
//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
LinkedList LinkedListInsert(LinkedList L,
int
i,ElemType x)
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
LinkedList LinkedListDelete(LinkedList L,ElemType x)
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
LinkedList list,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
ElemType x;
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
}
- c语言 链表
- 链表(C语言)
- c 语言 链表
- C语言:链表
- C语言:链表
- C语言-链表
- C语言 链表
- 链表c语言实现
- c语言 链表 删除
- C语言数据结构----链表
- c语言 链表
- C语言 之 链表
- C语言 链表
- C语言_链表
- C语言-链表
- C语言 链表
- 链表(C语言)
- C语言-链表
- 四道经典C语言指针试题
- vim自动缩进设置
- Android中资源文件夹res/raw和assets的使用
- SQL Server 2008中的新日期数据类型-Mssql数据库教程
- VB6做一个自动登录路由器
- c 语言 链表
- 【转】Android开发之游戏中的常用技巧
- .NET开发不可错过的25款必备工具
- 利用配置文件使用一些可配置的资源
- 宽带路由器自动登录怎么实现
- Linux 2.6驱动开发--字符设备驱动实例
- 使用递归函数,查询数据表将子类ID(包括孙类ID,重孙类ID...)保存为数组
- 这个夏天,香水“穿”出你的S曲线
- RhoStudio插件安装