链表结构实现

最近清理磁盘,发现以前自己的一些学习痕迹,当时留下的汇编代码现在看反而自己有点懵,所以,学习的一些心得是,不是你到底学了多少,一定是记住了多少,想想以前花了大量时间研究学习的都忘记,心里很不是滋味。为了不让它消失,也算对自己学习的一些回报就把它收录了进来,供大家参考。

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>


void inversion(int *p);//逆序
void sersion(int *p,int len);//冒泡排序

typedef struct List //list模型
{
int data;
struct List *next;
}*PNODE,NODE;

// 创建列表
PNODE create_list();
//遍历
void traverse_list(PNODE phead);
//判断是否为空
bool is_empty(PNODE phead);
//长度or是否饱和
int length_list(PNODE);
//插入
bool insert_list(PNODE, int, int);
//删除
bool delete_list(PNODE, int, int*);
//排序
void sort_list(PNODE);

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
141
142
143
144
145
146
147
148
149
150
151
152
153
//创建list
PNODE create_list(){
int len, i;
PNODE current;
printf("输入个数");
scanf("%d", &len);
PNODE phead = (PNODE)malloc(sizeof(NODE));
if (phead == NULL){
printf("分配失败!");
exit(-1);
}
phead->next = NULL;
current = phead;
for (i = 0; i < len; i++)
{
PNODE pnew = (PNODE)malloc(sizeof(NODE));
if (pnew == NULL){
printf("分配失败!");
exit(-1);
}
pnew->data = i;
current->next = pnew;
pnew->next = NULL;
current = pnew;
}
return phead;
}
//遍历
void traverse_list(PNODE phead)
{
PNODE p = phead->next;
while (p != NULL)
{
printf("%d\n", p->data);
p=p->next;
}
}
//是否为空
bool is_empty(PNODE phead){
if (phead->next == NULL)
return false;
return true;
}
//长度or是否饱和
int length_list(PNODE phead){
PNODE p = phead->next;
int len=0;
while (p != NULL)
{
len++;
p = p->next;
}
return len;

}
//插入
bool insert_list(PNODE phead, int pox, int val){
PNODE p;
int i;
for (i = 0; phead != NULL && i < pox - 1; phead = phead->next, i++)
{
printf(" ");
}
/*
while (phead != NULL&& i < pox - 1){
++i;
phead = phead->next;
}*/
if (phead==NULL||i>pox)
return false;
PNODE pnew = (PNODE)malloc(sizeof(NODE));
if (pnew == NULL){
printf("分配失败");
}
p=phead->next;
phead->next = pnew;
pnew->data = val;
pnew->next = p;
return true;
}
//删除
bool delete_list(PNODE phead, int pos, int *val){
int i = 0;
PNODE p = phead;
while (NULL != p->next && i < pos - 1)
{
p = p->next;
++i;

}
if (i>pos - 1 || NULL == p->next){
return false;
}
PNODE q = p->next;
*val = q->data;
//删除p节点后main的节点
p->next = p->next->next;
free(q);
q = NULL;
return true;
}
//排序
void sort_list(PNODE phead){
PNODE p = phead->next;
int tmp;
while (p != NULL)
{
PNODE current = p->next;
while (current!=NULL){
if (p->data < current->data)
{
tmp=p->data;
p->data = current->data;
current->data = tmp;
}
//printf("%d %d\n", p->data, current->data);
current = current->next;
}
p = p->next;
}
}
//冒泡
void sersion(int *p,int len){
int max ;
for (int i = 0; i < len; i++)
{
for (int j = i+1; j < len; j++)
{
if (p[i ] < p[j])
{
max = p[i ];
p[i ] = p[j];
p[j] = max;
}
//printf("%d\n,%d\n",p[i-1], p[j]);
}
}
}

void main(){
PNODE head = create_list(); //创建

//if (!is_empty(head)) //是否为空
// printf("列表为空");
//printf("长度为%d", length_list(head)); //长度
//sort_list(head); //排序
if (insert_list(head,6,22))
printf("插入成功\n");
traverse_list(head); //遍历
system("pause");
//遍历

}

版权声明:本文为博主原创,如若转载请标明出处https://dword.top/链表结构.html

-------------end-------------
0%