参考:https://www.hello-algo.com/chapter_hello_algo/
初始算法
算法:指对特定问题求解步骤的一种描述。根据基本逻辑解决问题,我们身边爱的算法非常多,以下是几个例子,便于理解算法。 例一:查字典。
顺序表
顺序表的定义如下:
顺序表定义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
| #include<stdio.h> #include<stdlib.h> #define MAX_SIZE 10 typedef int ElementType;
typedef struct { ElementType data[MAX_SIZE]; int length; } SqList;
SqList * InitList(){ SqList *list = (SqList *)malloc(sizeof(SqList)); list->length = 0; return list; }
void print_list(SqList *list){ for(int i=0;i<list->length;i++){ printf("%d ",list->data[i]); } printf("\n"); }
int add(SqList *list,int index,ElementType value){ if(index < 0 || index >= MAX_SIZE + 1){ printf("插入的位置不符合顺序表,不能插入\n"); return 0; } if(list->length>=MAX_SIZE){ printf("顺序表当前存储的元素已达到最大值,不能插入\n"); return 0; } for (int i = list->length; i >= index; i--){ list->data[i] = list->data[i-1]; } list->data[index] = value; list->length++; return 1; }
int del(SqList*list,int index){ if(index < 0 || index > list->length){ return 0; } if(list->length<=0){ printf("顺序表为空,不能删除"); return 0; } for(int i = index; i <= list->length; i++){ list->data[i] = list->data[i+1]; } list->length--; return 1; }
int find(SqList *list,ElementType value){ for(int i = 0; i <= list->length; i++){ if(list->data[i] == value){ printf("你要查找的元素 %d 在顺序表第 %d 个位置\n",value,i+1); return i+1;} } printf("未查找到该元素\n"); return 0; }
int main(){ SqList *list1 = InitList(); for(int i=0;i<MAX_SIZE-4;i++){ list1->data[i] = (i+1)*10; list1->length +=1; } print_list(list1); add(list1,0,2); print_list(list1); del(list1,2); print_list(list1); find(list1,10); return 0; }
|
查看代码运行结果:
太小了,请点击这个链接查看🔗,如果你想编辑我的代码,请注册图码,并点击这个链接🔗编辑
单链表
单链表定义如下: