今天白天跑公司加了半天班,改一个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;
}

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注