每日收获
include<stdio.h>
include<stdlib.h>//malloc函数
define MAXSIZE 100
typedef int ElemType;
//初始化
typedef struct {
//C 语言规定:指针变量名[下标] 等价于* (指针变量名 + 下标)。
//L->data[3] 等价于 *(L->data + 3)
//这种语法特性使得:只要指针指向一段连续的内存空间,就可以用数组的语法来访问其中的元素。
ElemType *data;
int length;
}SeqList;
SeqList* initList() {
SeqList* L = (SeqList)malloc(sizeof(SeqList));
L->data = (ElemType)malloc(sizeof(ElemType) * MAXSIZE);
L->length = 0;
return L;
}
//遍历顺序表
void ListElem(SeqList* L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
//在尾部添加元素
void appendElem(SeqList* L,ElemType e) {
if (L->length >= MAXSIZE) {
printf("内存已满\n");
}
L->data[L->length] = e;
L->length++;
}
//插入元素
void insertElem(SeqList* L, int pos, ElemType e) {
if (L->length >= MAXSIZE) {
printf("内存已满\n");
}
//length<MAXSIZE说明数组中至少还空缺一个位置
//循环的起始与终止条件以实际存在数据为准,对于要插入元素的位置pos,实际位置为pos-1,所以需要将pos-1到length-1的元素全部后移
for (int i = L->length - 1; i >= pos - 1; i--) {
L->data[i+1] = L->data[i];
}
L->data[pos - 1] = e;
L->length++;//插入元素,整体长度加一
}
//删除元素
void deleteElem(SeqList* L, int pos, ElemType* e) {
*e = L->data[pos - 1];
if (pos < L->length) {
//循环的起始与终止条件以实际存在数据为准,对于要删除的元素pos,实际位置为pos-1;需要将pos到length-1的元素前移覆盖,这样避免产生越界
for (int i = pos; i <= L->length-1; i++) {
L->data[i-1] = L->data[i];
}
L->length--;
}
}
//查找
int findElem(SeqList* L, ElemType e) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == e) {
return i + 1;
}
}
}
//主程序
int main() {
SeqList* list = initList();
printf("初始化成功,目前长度为%d\n", list->length);
printf("目前占用内存%zu\n", sizeof(list->data));
appendElem(list, 10);
appendElem(list, 20);
appendElem(list, 30);
appendElem(list, 40);
appendElem(list, 50);
appendElem(list, 60);
insertElem(list, 3, 25);
ElemType data;
deleteElem(list, 5, &data);
printf("删除的元素是%d\n", data);
printf("当前查找元素的位置为%d\n", findElem(list, 30));
ListElem(list);
return 0;
}
浙公网安备 33010602011771号