文章目录
- @[TOC]
- 1.前言🙋🏼♂️
- 2.顺序表🧣
- 2.1 顺序表盖帘🧣
- 2.2 顺序表特点🧣
- 2.2 顺序表作用🧣
- 3.顺序表基操🧤
- 3.1 结构体初始化🎉
- 3.2 顺序表初始化🎉
- 3.3 顺序表创建🎉
- 3.4 顺序表打印🎉
- 3.5 顺序表插入🎉
- 3.6 顺序表删除🎉
- 3.7 顺序表查找🎉
- 3.8 顺序表修改🎉
- 4. 总结
文章目录
- @[TOC]
- 1.前言🙋🏼♂️
- 2.顺序表🧣
- 2.1 顺序表盖帘🧣
- 2.2 顺序表特点🧣
- 2.2 顺序表作用🧣
- 3.顺序表基操🧤
- 3.1 结构体初始化🎉
- 3.2 顺序表初始化🎉
- 3.3 顺序表创建🎉
- 3.4 顺序表打印🎉
- 3.5 顺序表插入🎉
- 3.6 顺序表删除🎉
- 3.7 顺序表查找🎉
- 3.8 顺序表修改🎉
- 4. 总结
1.前言🙋🏼♂️
C语言想学好,链表和顺序表都跑不了.
2.顺序表🧣
2.1 顺序表盖帘🧣
顺序表是C语言中一种常用的数据结构,用于存储一组具有相同类型的元素。顺序表是一种线性表,即元素之间存在顺序关系,可以通过下标访问元素。
2.2 顺序表特点🧣
顺序表可以采用数组来实现,也可以使用动态内存分配来实现。无论采用哪种实现方式,顺序表都具有以下特点:
-
1. 随机访问:顺序表中的元素可以通过下标直接访问,具有O(1)的时间复杂度。
-
2. 内存连续:顺序表中的元素在内存中是连续存储的,这样可以有效利用计算机的缓存机制,提高访问效率。
-
3. 固定大小:使用数组实现的顺序表的大小是固定的,无法动态扩容或缩容。使用动态内存分配实现的顺序表可以动态调整大小。
-
4. 插入删除效率低:在顺序表的中间位置插入或删除元素需要移动后续元素,时间复杂度为O(n)。
2.2 顺序表作用🧣
在C语言中,可以通过定义结构体来表示顺序表,结构体中包含一个指向元素数组的指针,以及其他与顺序表相关的属性,例如当前元素个数和最大容量等。使用结构体可以更方便地管理和操作顺序表。
3.顺序表基操🧤
3.1 结构体初始化🎉
#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;typedef struct{ElemType data[MAXSIZE]; ElemType length;
}sqlList;sqlList *L;
3.2 顺序表初始化🎉
//初始化表
void initTable(sqlList *L){printf("initTable:\n");L->length = 0;
}
3.3 顺序表创建🎉
//创建表
void createTable(sqlList *L,ElemType number){printf("createTable:\n");int i;printf("请输入%d个数据:\n",number);if(L->length>MAXSIZE){printf("顺序表已满");}for(i=0;i<number;i++){scanf("%d",&L->data[i]);}L->length = i;}
3.4 顺序表打印🎉
//显示表
void showTable(sqlList *L){printf("showTable:\n"); int i;for(i=0;i<L->length;i++){printf("%d ",L->data[i]);}
}
3.5 顺序表插入🎉
void insertTable(sqlList *L,ElemType pos,ElemType val){printf("\ninserTable:\n");int i;if(L->length<MAXSIZE){for(i=L->length-1;i>=pos-1;i--){L->data[i+1] = L->data[i];}L->data[pos-1] = val;L->length++;}else{printf("顺序表长度已满\n");}
}
3.6 顺序表删除🎉
void deleteTable(sqlList *L,ElemType x){printf("\n deleteTable: \n");int i,j;for(i=0;i<L->length;i++){if(L->data[i] == x){for(j=i;j<L->length;j++){L->data[j] =L->data[j+1];}L->length--;}}
}
3.7 顺序表查找🎉
//查找元素
int queryTable(sqlList *L,ElemType x){printf("\nqueryTable:\n");int i,res;i=0;while(i<L->length && L->data[i] !=x)i++;if(i>=L->length) return 0;else return i+1;
}
3.8 顺序表修改🎉
//修改元素
void updateTable(sqlList *L,ElemType findNuber,ElemType alterNuber){int res = queryTable(L,findNuber);int i;L->data[res-1] = alterNuber;printf("\nres = %d\n",res);
}
以下是顺序表的C语言代码(全部):
#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;typedef struct{ElemType data[MAXSIZE];ElemType length;
}sqlList;sqlList *L;//初始化表
void initTable(sqlList *L){printf("initTable:\n");L->length = 0;
} //创建表
void createTable(sqlList *L,ElemType number){printf("createTable:\n");int i;printf("请输入%d个数据:\n",number);if(L->length>MAXSIZE){printf("顺序表已满");}for(i=0;i<number;i++){scanf("%d",&L->data[i]);}L->length = i;} //显示表
void showTable(sqlList *L){printf("showTable:\n"); int i;for(i=0;i<L->length;i++){printf("%d ",L->data[i]);}
} //插入一个数据
void insertTable(sqlList *L,ElemType pos,ElemType val){printf("\ninserTable:\n");int i;if(L->length<MAXSIZE){for(i=L->length-1;i>=pos-1;i--){L->data[i+1] = L->data[i];}L->data[pos-1] = val;L->length++;}else{printf("顺序表长度已满\n");}
} //删除一个元素
void deleteTable(sqlList *L,ElemType x){printf("\n deleteTable: \n");int i,j;for(i=0;i<L->length;i++){if(L->data[i] == x){for(j=i;j<L->length;j++){L->data[j] =L->data[j+1];}L->length--;}}
} //查找元素
int queryTable(sqlList *L,ElemType x){printf("\nqueryTable:\n");int i,res;i=0;while(i<L->length && L->data[i] !=x)i++;if(i>=L->length) return 0;else return i+1;
} //修改元素
void updateTable(sqlList *L,ElemType findNuber,ElemType alterNuber){int res = queryTable(L,findNuber);int i;L->data[res-1] = alterNuber;printf("\nres = %d\n",res);
} main()
{initTable(&L); createTable(&L,5);showTable(&L);insertTable(&L,3,60);showTable(&L);deleteTable(&L,60);showTable(&L);printf("下标:%d\n",queryTable(&L,20));updateTable(&L,20,90);showTable(&L);
}