常用数据结构代码示例
Posted moxiaoyu557
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用数据结构代码示例相关的知识,希望对你有一定的参考价值。
线性表
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define MAXSIZE 20 //存储空间大小 5 6 typedef int data_t; 7 8 //线性表结构 9 typedef struct 10 { 11 data_t data[MAXSIZE]; //数组,存储数据元素 12 int len; //线性表长度(从 1 开始) 13 }sqlist; 14 15 16 //创建线性表 17 sqlist* create_sqlist() 18 { 19 sqlist* L = (sqlist*)malloc(sizeof(sqlist)); 20 if (L == NULL) 21 { 22 perror("malloc"); 23 return NULL; 24 } 25 L->len = 0; 26 return L; 27 } 28 29 30 //初始化线性表 31 int init_sqlist(sqlist* L) 32 { 33 L->len = 0; //初始化为 0,当增加元素时从 1 开始计数 34 return 1; 35 } 36 37 38 //线性表长度 39 int length_sqlist(sqlist* L) 40 { 41 return L->len; 42 } 43 44 45 //返回第 i 个位置的元素(按位置查找) 46 int get_elem(sqlist* L, int i) 47 { 48 if (L->len == 0 || i < 1 || i > L->len) 49 return -1; 50 data_t data = L->data[i - 1]; 51 return data; 52 } 53 54 55 //返回线性表中与给定值相等的元素的位置(按值查找) 56 int get_locate(sqlist* L, data_t data) 57 { 58 //线性表为空 59 if (L->len == 0) 60 return -1; 61 62 //遍历查找 63 int i = 0; //i 为下表,返回 i+1 64 while (i < L->len) 65 { 66 if (L->data[i] == data) 67 return i + 1; 68 ++i; 69 } 70 //遍历完整个线性表都没有找到 71 if (i >= L->len) 72 return -1; 73 } 74 75 76 //插入元素 77 int insert_elem(sqlist* L, int loca, data_t data) 78 { 79 if (L->len == MAXSIZE) //线性表已满 80 return -1; 81 if (loca < 1 || loca > L->len + 1) //可以插到最后一个元素的后面,所以插入的位置可以等于线性表长度+ 82 return -1; 83 84 //开始插入 85 for (int i = L->len - 1; i >= loca - 1; --i) //len 和 loca 都是从 1 开始的,但是 i 是下标,所以 len 和 loca 都要减 1 86 { 87 L->data[i + 1] = L->data[i]; 88 } 89 L->data[loca - 1] = data; //插入新元素 90 ++L->len; 91 92 return 1; 93 } 94 95 96 //删除元素(按位置删除) 97 int delete_elem(sqlist* L, int loca) 98 { 99 if (L->len == 0) 100 return -1; 101 if (loca < 1 || loca > L->len) 102 return -1; 103 104 //开始删除 105 for (int i = loca; i < L->len; ++i) //将该位置(从 0 开始)后面的数依次前移 106 L->data[i - 1] = L->data[i]; 107 L->len--; 108 109 return 1; 110 } 111 112 //修改元素(按位置查找) 113 int change_elem(sqlist* L, int loca, data_t data) 114 { 115 if (L->len == 0) 116 return -1; 117 if (loca < 1 || loca > L->len) 118 return -1; 119 120 //开始修改 121 L->data[loca - 1] = data; 122 123 return 1; 124 } 125 126 127 //打印线性表 128 void show_sqlist(sqlist* L) 129 { 130 for (int i = 0; i < L->len; ++i) 131 printf("%d ", L->data[i]); 132 printf(" "); 133 } 134 135 136 137 int main() 138 { 139 int i; //下标 140 int len; //长度 141 142 //创建线性表 143 sqlist* L = create_sqlist(); 144 145 //线性表的长度 146 printf("新建线性表的长度:len = "); 147 len = length_sqlist(L); 148 printf("%d ", len); 149 150 //在头位置插入 151 printf("在第一个位置插入5个数:"); 152 for (i = 1; i <= 5; ++i) 153 insert_elem(L, 1, i); 154 155 //打印 156 show_sqlist(L); 157 158 //求长度 159 printf("插入5个元素后的线性表长度:len = "); 160 len = length_sqlist(L); 161 printf("%d ", len); 162 163 //按位置查找(从 1 开始) 164 int elem = get_elem(L, 3); 165 printf("第 3 个位置的元素为:%d ", elem); 166 167 //按值查找 168 int loca = get_locate(L, 4); 169 printf("4 在第 %d 个位置 ", loca); 170 171 //删除元素 172 delete_elem(L, 1); 173 printf("删除第 1 个元素:"); 174 show_sqlist(L); 175 176 //修改元素 177 printf("将第 2 个位置的数据改为 100:"); 178 change_elem(L, 2, 100); 179 show_sqlist(L); 180 181 182 return 0; 183 }
链表
以上是关于常用数据结构代码示例的主要内容,如果未能解决你的问题,请参考以下文章