-
Notifications
You must be signed in to change notification settings - Fork 0
/
day 02 - new
181 lines (158 loc) · 4.92 KB
/
day 02 - new
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
********************************************头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 255
//定义数据元素
typedef int ElementType;
typedef struct i
{
ElementType data[MAX_SIZE]; //元素集合
int length; //元素个数
}SeqList;
//定义顺序表 - 初始化顺序表
void InitList(SeqList* SL, ElementType* elem, int len);//SeqList初始化顺序表,ElementType初始化要添加的元素内容数组,len初始添加的元素个数
//添加,任意位置
void InsertElement(SeqList* SL, int index, ElementType ele);//SeqList插入的表,index插入的下标,index插入的个数
//打印
void PrintList(SeqList* SL);
**********************************************实现的c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"DataElement.h"
//初始化
void InitList(SeqList* SL, ElementType* elem, int len)
{
if (len>MAX_SIZE)
{
printf("超出了数组最大容量\n");
return;
}
SL->length = 0;
for (int i = 0; i < len-1; i++)
{
//每个循环初始化一个元素
InsertElement(SL, i, elem[i]);
}
}
//插入的位置后要往后移动,在放入插入的位置
//长度变成n+1了
//最后的下标变成n
//实现的时候不能超过最大长度,超了要给空间(动态内存)
void InsertElement(SeqList* SL, int index, ElementType ele)
{
//1.验证插入后的元素空间是否超过最大空间MAX_SIZE
if (SL->length+1 >= MAX_SIZE)
{
printf("数组已满,插入数组失败\n");
}
//2.index的值是否合法0 - MAX_SIZE-1
if (index < 0 || index > MAX_SIZE-1)
{
printf("下标范围错误0 - %d\n", MAX_SIZE - 1);
}
//3.插入的index应该在len+1之内
if (index > SL->length)
{
printf("插入的下标超过数组最大长度\n");
}
//4.从第len-1个下标开始,前面一个元素给后面一个元素
//在c89标准中不允许在for中直接定义变量
//c99中以后就允许了
for (int i = SL->length - 1;i >= index; i--)
{
SL->data[i + 1] = SL->data[i];
}
//5讲要插入的值赋值index个元素
SL->data[index] = ele;
//6顺序表的总长度加1
SL->length++;
}
//打印
void PrintList(SeqList* SL)
{
for (int i = 0; i < SL->length; i++)
{
printf("%d", SL->data[i]);
}
}
*********************************************************main.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"DataElement.h"
//线性表
// 理解什么是线性表
// 了解线性表的顺序存储结构 //重点
// 线性表的顺序存储结构
// 线性表的链式存储结构
// 单链表 //重点,后面的代码思路都是建立在单链表的基础之上
// 静态链表 //难点
// 循环列表
// 双向链表 //难点
//定义
// 0个或多个数据元素的有限序列
//
//它是一个序列
// 数据元素之间是有序的
// 数据元素之间是一对一的关系
//它是有限的
// 线性表的数据元素个数是有限的
//注意:0个数据元素的有限序列又被称为空表
//常见的操作
// 创建和初始化
// 寻找
// 插入
// 删除
// 清空
// (增删查改)
//ADT线性表(sequenceList)
//数据(data)
// 1.线性表数据元素是一个集合 - 数组如 {a1,a2,a3...an} - 每一个元素的类型是datatype 如(int,char,自定义)
// 2.除了第一个元素a1外,每个元素有且只有一个直接的前驱元素 - 前面有元素叫前驱
// 3.除了最后一个元素an外,每个元素有且只有一个直接的后继元素 - 后面有元素叫后继
// 4.每个数据元素之间的关系是一对一的关系
//
//Operation - (操作)
// InitList(*List) - (初始化)创建一个空的线性表List
// InsertElement(*List,index(在哪插入),elem(插入的是什么)) - (增加)在线性表List的index下标出插入元素elem
// Delete Element(*List,index,*elem(返回你删除了什么)) - (删除)删除线性表List中的index下标元素,并返回删除元素的指针elem
// GetLength(*list) - (告诉我长度是多少)
// IsEmpty(*List) - (线性表是空的吗)
// ClearList(*list) - (清空)
// GetElement(*List,index,*elem) - (查找)在线性表List下查找index下标返回元素elem
// ExsitElem(*List,elem) - (查找元素) - 存在返回下标,不存在返回-1
//endADT
//线性表按顺序存储
//描述线性表的顺序存储结构需要三个属性:#define定义的常量,typedef定义的类型,typedef定义的结构体
// 1.我们需要定义线性表的最大存储空间
// #define MAX_SIZE 255
// 3.定义循序表结构
// typedef int ElemType
// typedef struct
// {
// seqList data[MAX_SIZE];
// int length;
// }SeqList;
//地址计算方法
// 第一个元素地址是0,然后是1,2,3
// 所以第n个元素是n-1个地址
// 就是
// *(data + 0) = data[0]
// *(data + 1) = data[1]
// *(data + n-1) = data[n-1]
//
//之后写程序的时候会遇到
// position - (位置,从1开始)
// index - (下标,从0开始)
//
//测试
void TestSequenceList()
{
SeqList s;
InitList(&s, 1,1);
printList(&s);
}
//开始
int main()
{
void TestSequenceList();
return 0;
}