C 顺序表结构

C语言顺序表结构

顺序表,也称作线性表,是数据结构的一种,由一系列数据元素组成,每个数据元素在内存中按顺序存放。顺序表中的数据元素可以是相同类型的数据,也可以是不同类型的数据。

在计算机科学中,顺序表通常用数组表示,数组是一个由相同类型的数据元素组成的集合。数组中的每个元素都存储在一个连续的内存地址中,并且可以通过它们的索引来访问。

例如,下面是一个用Python表示的顺序表,其中包含整数:
my_list = [1, 2, 3, 4, 5]

在这个例子中,my_list是一个包含五个整数的顺序表,它们的值分别为1、2、3、4、5。要访问其中某个元素的值,可以使用索引,例如:
first_element = my_list[0] # first_element的值为1 second_element = my_list[1] # second_element的值为2

顺序表可以用于存储各种类型的数据,如整数、浮点数、对象等。

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#ifndef SEQUENTIAL_LIST_H  
#define SEQUENTIAL_LIST_H

#include <stdlib.h>

typedef struct {
char name[20];
int age;
} Data;

typedef struct {
Data *list_data; #ifndef SEQUENTIAL_LIST_H
#define SEQUENTIAL_LIST_H

#include <stdlib.h>

typedef struct {
char name[20];
int age;
} Data;

typedef struct {
Data *list_data;
int length;
int max_length;
} sequential_list;

// initialize the list
void seq_init(sequential_list *list, int size) {
list->list_data = (Data *) malloc(sizeof(Data) * size);
list->max_length = size;
list->length = 0;
}

// return the length of the list
int seq_length(sequential_list *list) {
return list->length;
}

// append a new element to the list
int seq_append(sequential_list *list, Data data) {
if(list->length >= list->max_length){
return -1;
}
list->list_data[list->length++] = data;
return list->length;
}

// insert a new element to the list
int seq_insert(sequential_list *list, int index, Data data) {
if (index < 0 || index > list->max_length || index > list->length) {
return -1;
}

// shift the elements to the right
for (int i = list->length; i > index; i--) {
list->list_data[i] = list->list_data[i - 1];
}
// insert the new element
list->list_data[index] = data;
list->length++;
return list->length;
}

// delete an element from the list
int seq_delete(sequential_list *list, int index) {
if(index <0 || index > list->length){
return -1;
}
// shift the elements to the left
for(int i=index; i<list->length; i--){
list->list_data[i] = list->list_data[i+1];
}
return --list->length;
}

int seq_get_index(sequential_list* list, Data data){
for(int i=0; i < list->length; i++){
if(data.age == list->list_data[i].age && strcmp(data.name, list->list_data[i].name) == 0){
return i;
}
}
return -1;
}

Data* set_get_element(sequential_list* list, int index){
if(index < 0 || index > list->length){
return NULL;
}
return &list->list_data[index];
}

void seq_clean(sequential_list *list){
free(list->list_data);
list->max_length = 0;
list->length = 0;
list->list_data = NULL;
}

// print the element in the list
void seq_print_element(sequential_list *list, int index) {
printf("name:%s\n", list->list_data->name);
printf("age:%d\n", list->list_data->age);
printf("index:%d\n", list->length - 1);
}

#endif //SEQUENTIAL_LIST_H
int length;
int max_length;
} sequential_list;

// initialize the list
void seq_init(sequential_list *list, int size) {
list->list_data = (Data *) malloc(sizeof(Data) * size);
list->max_length = size;
list->length = 0;
}

// return the length of the list
int seq_length(sequential_list *list) {
return list->length;
}

// append a new element to the list
int seq_append(sequential_list *list, Data data) {
if(list->length >= list->max_length){
return -1;
}
list->list_data[list->length++] = data;
return list->length;
}

// insert a new element to the list
int seq_insert(sequential_list *list, int index, Data data) {
if (index < 0 || index > list->max_length || index > list->length) {
return -1;
}

// shift the elements to the right
for (int i = list->length; i > index; i--) {
list->list_data[i] = list->list_data[i - 1];
}
// insert the new element
list->list_data[index] = data;
list->length++;
return list->length;
}

// delete an element from the list
int seq_delete(sequential_list *list, int index) {
if(index <0 || index > list->length){
return -1;
}
// shift the elements to the left
for(int i=index; i<list->length; i--){
list->list_data[i] = list->list_data[i+1];
}
return --list->length;
}

int seq_get_index(sequential_list* list, Data data){
for(int i=0; i < list->length; i++){
if(data.age == list->list_data[i].age && strcmp(data.name, list->list_data[i].name) == 0){
return i;
}
}
return -1;
}

Data* set_get_element(sequential_list* list, int index){
if(index < 0 || index > list->length){
return NULL;
}
return &list->list_data[index];
}

// print the element in the list
void seq_print_element(sequential_list *list, int index) {
printf("name:%s\n", list->list_data->name);
printf("age:%d\n", list->list_data->age);
printf("index:%d\n", list->length - 1);
}

#endif //SEQUENTIAL_LIST_H

C 顺序表结构
http://cvrain.cloudvl.cn/2023/11/15/DataStructure/c-seqlist/
作者
ClaudeRainer
发布于
2023年11月15日
许可协议