今天白天跑公司加了半天班,改一个BUG改了一下午,原因是同事开启了事务未提交,写代码还是要仔细啊。晚上安装了CLion开始用 C 语言学习数据结构,动手写了个顺序表和带头节点链表,果然动手后理解起来容易多
// 定义一个顺序表
#include <stdio.h>
#include <malloc.h>
#define Size 5
typedef struct Table {
int * head; // 定义一个指针;
int length; // 当前长度;
int size; // 可使用元素总个数
}table;
table initTable(){
table t; // 定义一个 table 结构体
t.head = (int *) malloc(sizeof(int) * Size); // 申请一段内存空间
if(!t.head){
printf("初始化失败");
exit(0);
}
t.length = 0; // 初始长度为0
t.size = Size;
return t;
}
void displayTable(table t){
for (int i = 0; i < t.length; ++i) {
printf("%d",t.head[i]);
}
}
int main() {
table t = initTable();
for(int i = 0; i <= Size; i++){
t.head[i] = i;
t.length ++;
}
displayTable(t);
return 0;
}
// 定义一个带有头指针的链表
#include <stdio.h>
#include <malloc.h>
#define Size 5
typedef struct Link {
int data; // 数据域
struct Link *next; // 指针域
} link;
link *initTable() {
link *p = NULL; // 头指针
link *temp = (link *) malloc(sizeof(link)); // 创建临时节点
temp->data = 0; // 为临时节点赋值
temp->next = NULL;
p = temp; // 头指针指向临时节点
for (int i = 1; i < Size; i++) {
link *a = (link *) malloc(sizeof(link)); // 创建一个新节点
a->data = i; // 为新节点赋值
a->next = NULL;
temp->next = a; // 将前驱元素的指针指向新节点
temp = a; // 将临时节点的指针指向新节点,也可以写成 temp->next
}
return p;
}
void display(link *p) {
link *temp = p; // 定义一个指针指向指针p
while (temp) { // 循环链表
printf("%d", temp->data); // 打印数据域
temp = temp->next; // 每次循环将指针移动到下个节点
}
}
int main() {
link *l = initTable();
display(l);
return 0;
}