liukuan.net

liukuan.net,发现,记录,分享

718

关于数据结构中的简单链表增删改查的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<code class='c'>
#include <stdio.h>
#include <stdlib.h>
 
typedef struct ListNode{
	int data;/*数据*/
	struct ListNode *next; /*下一个节点的地址*/
 
}LIST_NODE;
 
LIST_NODE *node_create(int data){
	//给node开辟一个动态存储空间。
	LIST_NODE *node = malloc(sizeof(LIST_NODE));
	node->data = data;
	node->next = NULL;
	return node;
}
 
LIST_NODE *list_create()
{
	/*创建一个链表,该链表返回一个next的空指针,有一个为0的data数据*/
	LIST_NODE *head = node_create(0);
	return head;
}
 
/*add_new_node*/
void list_insert(LIST_NODE *head,int data){
	LIST_NODE *node = node_create(data);
	//前插
	node->next = head->next;
	head->next = node;
}
 
 
void list_print(LIST_NODE *head){
	LIST_NODE *node = head->next;
	/*遍历链表*/
	for(;node;node=node->next){
		printf("%d\n",node->data);
	}
}
 
void list_del(LIST_NODE *head,int data)
{
	LIST_NODE *node = head->next;
	LIST_NODE *prev = head;
	while(node){
		if(node->data == data){
			/*从链表中剔除节点*/
			prev->next = node->next;
			free(node);
			/*指向下一个*/
			node = prev->next;
		}
		else
		{
			/**/
			prev = node;
			node = node->next;
		}
	}
	/*
	for(node=head->next;node;prev=node,node=node->next){
		if(node->data == data){
			//删除node节点
			//从链表中剔除节点
			prev->next = node->next;
			//释放节点内存
			free(node);
		}else{
 
		}
	}
	*/
 
}
 
void list_update(LIST_NODE *head,int old,int new){
	LIST_NODE *node = NULL;
	/*遍历链表*/
	for(node=head->next;node;node=node->next){
		if(node->data == old){
			node->data = new;
		}
	}
}
 
int list_query(LIST_NODE *head,int data){
	LIST_NODE *node = NULL;
	int pos = 0;
	for(node=head->next;node;node=node->next){
		if(node->data == data){
			//node->data = new;
			break;
		}
		pos++;
	}
	if(node != NULL)
	{
		return pos;
	}
	return -1;
 
}
 
LIST_NODE *node_destroy(LIST_NODE *head){
	LIST_NODE *next = head->next;
	free(head);	
	return next;
}
 
void list_destroy(LIST_NODE *head){
	while(head){
		head = node_destroy(head);
	}
}
 
int main(){
	int i = 0;
	/*创建链表*/
	LIST_NODE *head = list_create();
	/*插入节*/
	for(;i<=30;i++){
		list_insert(head,i);
 
	}
	//删除节点
	list_del(head,20);
	//修改节点
	list_update(head,22,33);
	//查找
	printf("%d\n",list_query(head,27));
	list_print(head);
        //销毁所有
	list_destroy(head);
	getchar();
	list_print(head);
 
 
}
原文地址 : https://liukuan.net/note/87.html
本站遵循 : 知识共享署名-非商业性使用-相同方式共享 3.0 版权协议
版权声明 : 原创文章转载时,请务必以超链接形式标明 文章原始出处
作者:admin | 分类:学习笔记,个人原创,c/c++ | 标签: C语言
此文章共有条评论, 人参与 |Powerd By Angboo