C语言--顺序表

简介:

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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
#pragma once            //只编译一次
 
#include <memory.h>
#include<assert.h>
#include <stdio.h>
 
#define  MAX_SIZE 100
typedef int DataType;             //数据类型重命名
typedef struct SeqList         //定义结构体类型
{
    DataType array[MAX_SIZE];     // 数据段
    size_t size;                 // 数据个数
}SeqList;
 
 
//初始化结构体变量
 
void InitSeqList(SeqList* pSeq)
{
    memset(pSeq->array, 0, sizeof(DataType)*MAX_SIZE);
    pSeq->size = 0;
}
 
 
//打印结构体变量
 
void PrintSeqList(SeqList* pSeq)            
{
    size_t i = 0;
    assert(pSeq);
 
    for (i = 0; i < pSeq->size; i++)
    {
        printf("%d ", pSeq->array[i]);
    }
 
    printf("\n");
}
 
 
//在结构体数组变量的最后面插入x
 
void PushBack(SeqList* pSeq, DataType x)        
{
    assert(pSeq);
    if (pSeq->size >= MAX_SIZE)            //判断顺序表是否已经满了
    {
        printf("list is full!\n");
        return;
    }
    pSeq->array[pSeq->size++] = x;    
}
 
 
//删除最后面一个有效元素
 
void PopBack(SeqList* pSeq)            
{
    assert(pSeq);        //指针判空
    if (pSeq->size == 0)    //顺序表判空
    {
        printf("list is empty!\n");
        return;
    }
    //pSeq->size--;                 //pSeq->size - 1;直接size-1,删除未知的数据为重置
    pSeq->array[--pSeq->size] = 0; //pSeq->size - 1 && pSeq->array[p->size-1]=0;数据重置
}
 
 
//在最顺序表最前面插入一个x
 
void PushFront(SeqList* pSeq, DataType x)        
{
    assert(pSeq);
    int begin = pSeq->size - 1;        //数组下标为数据个数减1;
    if (pSeq->size >= MAX_SIZE)        //顺序表判断是否已经满了
    {
        printf("list is full!\n");
        return;
    }
    for (; begin >= 0; begin--)
    {
        pSeq->array[begin + 1] = pSeq->array[begin]; //所有数据向后移动一位,赋值x给p->array[0];
    }
    pSeq->array[0] = x;
    pSeq->size++;            //size+1;
 
}
 
 
//删除顺序表最首位元素
 
void PopFront(SeqList* pSeq)        
{
    assert(pSeq);        //指针判空
    int i = 1;
    if (pSeq->size <= 0)    //顺序表判空
    {
        printf("list is empty!\n");
        return;
    }
    for (i = 1; i < pSeq->size; i++)
    {
        pSeq->array[i - 1] = pSeq->array[i];        //所有元素前移一位
    }
    pSeq->size--;                //size-1
}
 
 
//在pos 位置 插入x
 
void Insert(SeqList* pSeq, size_t pos, DataType x)  
{
    assert(pSeq);    //指针判空
    size_t end = pSeq->size - 1;
    if (pSeq->size >= MAX_SIZE)        
    {
        printf("list is full!\n");        //顺序表判满
        return;
    }
    for (; end >= pos; end--)
    {
        pSeq->array[end + 1] = pSeq->array[end]; //pos位置及以后的元素全部后移一位,pos位置置为x
    }
    pSeq->array[pos] = x;        
    pSeq->size++;        //插入数据,size 加1
}
 
 
//寻找x的位置
 
int Find(SeqList* pSeq, DataType x)        
{
    assert(pSeq);        //指针判空
    if (pSeq->size <= 0)    //顺序表判空
    {
        printf("list is empty!\n");
        return -1;
    }
    rsize_t i = 0;
    for (i = 0; i < pSeq->size; i++)
    {
        if (pSeq->array[i] == x)
        {
            return i;        //返回数据x 的下表值
        }
    }
    return -1;        //未找到x返回 -1
}
 
 
// 删除pos位置的数据
 
void Erase(SeqList* pSeq, size_t pos)        
{
本文转自 七十七快 51CTO博客,原文链接:http://blog.51cto.com/10324228/1716790


相关文章
|
存储 算法 程序员
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
【数据结构】C语言实现顺序表万字详解(附完整运行代码)
372 0
|
C语言
C语言顺序表
C语言顺序表
117 0
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
400 3
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
187 2
|
C语言
链式顺序表实现(C语言描述)
本文介绍了如何在C语言中实现链式顺序表,包括数据结构的定义、节点的创建、数据的插入和删除以及链表的打印和销毁。
195 2
|
C语言
顺序表数组法构建(C语言描述)
如何使用C语言通过数组方法构建有序顺序表,包括顺序表的创建、插入、删除和打印等。
134 2
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
867 5
|
存储 算法 C语言
C语言手撕数据结构代码_顺序表_静态存储_动态存储
本文介绍了基于静态和动态存储的顺序表操作实现,涵盖创建、删除、插入、合并、求交集与差集、逆置及循环移动等常见操作。通过详细的C语言代码示例,展示了如何高效地处理顺序表数据结构的各种问题。
203 1
|
存储 C语言
数据结构——顺序表(C语言版)
数据结构——顺序表(C语言版)
160 5
|
存储 C语言
C语言实验-动态顺序表实现简易通讯录(二)
在这个C语言实验中,你将实现一个简单的通讯录,它使用动态顺序表来存储联系人信息。
168 2