常用数据结构代码示例
线性表
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 20 //存储空间大小 typedef int data_t; //线性表结构 typedef struct { data_t data[MAXSIZE]; //数组,存储数据元素 int len; //线性表长度(从 1 开始) }sqlist; //创建线性表 sqlist* create_sqlist() { sqlist* L = (sqlist*)malloc(sizeof(sqlist)); if (L == NULL) { perror("malloc"); return NULL; } L->len = 0; return L; } //初始化线性表 int init_sqlist(sqlist* L) { L->len = 0; //初始化为 0,当增加元素时从 1 开始计数 return 1; } //线性表长度 int length_sqlist(sqlist* L) { return L->len; } //返回第 i 个位置的元素(按位置查找) int get_elem(sqlist* L, int i) { if (L->len == 0 || i < 1 || i > L->len) return -1; data_t data = L->data[i - 1]; return data; } //返回线性表中与给定值相等的元素的位置(按值查找) int get_locate(sqlist* L, data_t data) { //线性表为空 if (L->len == 0) return -1; //遍历查找 int i = 0; //i 为下表,返回 i+1 while (i < L->len) { if (L->data[i] == data) return i + 1; ++i; } //遍历完整个线性表都没有找到 if (i >= L->len) return -1; } //插入元素 int insert_elem(sqlist* L, int loca, data_t data) { if (L->len == MAXSIZE) //线性表已满 return -1; if (loca < 1 || loca > L->len + 1) //可以插到最后一个元素的后面,所以插入的位置可以等于线性表长度+ return -1; //开始插入 for (int i = L->len - 1; i >= loca - 1; --i) //len 和 loca 都是从 1 开始的,但是 i 是下标,所以 len 和 loca 都要减 1 { L->data[i + 1] = L->data[i]; } L->data[loca - 1] = data; //插入新元素 ++L->len; return 1; } //删除元素(按位置删除) int delete_elem(sqlist* L, int loca) { if (L->len == 0) return -1; if (loca < 1 || loca > L->len) return -1; //开始删除 for (int i = loca; i < L->len; ++i) //将该位置(从 0 开始)后面的数依次前移 L->data[i - 1] = L->data[i]; L->len--; return 1; } //修改元素(按位置查找) int change_elem(sqlist* L, int loca, data_t data) { if (L->len == 0) return -1; if (loca < 1 || loca > L->len) return -1; //开始修改 L->data[loca - 1] = data; return 1; } //打印线性表 void show_sqlist(sqlist* L) { for (int i = 0; i < L->len; ++i) printf("%d ", L->data[i]); printf("\n"); } int main() { int i; //下标 int len; //长度 //创建线性表 sqlist* L = create_sqlist(); //线性表的长度 printf("新建线性表的长度:len = "); len = length_sqlist(L); printf("%d\n", len); //在头位置插入 printf("在第一个位置插入5个数:"); for (i = 1; i <= 5; ++i) insert_elem(L, 1, i); //打印 show_sqlist(L); //求长度 printf("插入5个元素后的线性表长度:len = "); len = length_sqlist(L); printf("%d\n", len); //按位置查找(从 1 开始) int elem = get_elem(L, 3); printf("第 3 个位置的元素为:%d\n", elem); //按值查找 int loca = get_locate(L, 4); printf("4 在第 %d 个位置\n", loca); //删除元素 delete_elem(L, 1); printf("删除第 1 个元素:"); show_sqlist(L); //修改元素 printf("将第 2 个位置的数据改为 100:"); change_elem(L, 2, 100); show_sqlist(L); return 0; }
链表
相关推荐
koushr 2020-11-12
zhangxiafll 2020-11-13
kikaylee 2020-10-31
范范 2020-10-28
MILemon 2020-10-22
hugebawu 2020-10-12
LauraRan 2020-09-28
shenwenjie 2020-09-24
omyrobin 2020-09-23
guangcheng 2020-09-22
qiangde 2020-09-13
hanyujianke 2020-08-18
晨曦之星 2020-08-14
xiesheng 2020-08-06
KAIrving 2020-08-02
xiesheng 2020-08-02
范范 2020-07-30
chenfei0 2020-07-30