当前位置: 首页 > article >正文

数据结构链串的简单代码实现(C语言代码版)

注:本代码只限于简单,目前只考虑字符单个输入情况

#include <stdio.h>  
#include <stdlib.h>  
  
// 定义链串的节点  
typedef struct Node {  
    char data;          // 节点存储的字符  
    struct Node* next;  // 指向下一个节点的指针  
} Node;  
  
// 定义链串的结构体  
typedef struct {  
    Node* head;         // 指向链串第一个节点的指针  
    int length;         // 链串的长度  
} LinkString;  
  
// 创建一个新的链串节点  
Node* createNode(char data) {  
    Node* newNode = (Node*)malloc(sizeof(Node));  
    if (newNode == NULL) {  
        fprintf(stderr, "Memory allocation failed\n");  
        exit(EXIT_FAILURE);  
    }  
    newNode->data = data;  
    newNode->next = NULL;  
    return newNode;  
}  
  
// 初始化链串  
void initLinkString(LinkString* ls) {  
    ls->head = NULL;  
    ls->length = 0;  
}  
  
// 在链串末尾添加字符  
void appendChar(LinkString* ls, char c) {  
    Node* newNode = createNode(c);  
    if (ls->head == NULL) {  
        ls->head = newNode;  
    } else {  
        Node* temp = ls->head;  
        while (temp->next != NULL) {  
            temp = temp->next;  
        }  
        temp->next = newNode;  
    }  
    ls->length++;  
}  
  
// 打印链串  
void printLinkString(LinkString* ls) {  
    Node* temp = ls->head;  
    while (temp != NULL) {  
        printf("%c", temp->data);  
        temp = temp->next;  
    }  
    printf("\n");  
}  
  
// 释放链串占用的内存  
void freeLinkString(LinkString* ls) {  
    Node* temp;  
    while (ls->head != NULL) {  
        temp = ls->head;  
        ls->head = ls->head->next;  
        free(temp);  
    }  
    ls->length = 0;  
}  
  
int main() {  
    LinkString ls;  
    initLinkString(&ls);  
  
    // 向链串中添加字符  
    appendChar(&ls, 'H');  
    appendChar(&ls, 'e');  
    appendChar(&ls, 'l');  
    appendChar(&ls, 'l');  
    appendChar(&ls, 'o');  
  
    // 打印链串  
    printLinkString(&ls);  
  
    // 释放链串占用的内存  
    freeLinkString(&ls);  
  
    return 0;  
}


http://www.kler.cn/a/287373.html

相关文章:

  • 商业物联网详细指南:优势与挑战
  • Linux Kernel Programming 2
  • Java 全栈知识体系
  • RSA算法原理
  • 使用IDE实现java端远程调试功能
  • Linux-何为CentOS
  • chapter11-枚举和注解——(枚举类)——day14
  • DMDSC集群安装
  • 【网络安全】ASP.NET网站中的文件上传RCE
  • SQL 五十周年:何去何从?
  • 极狐GitLab 如何管理 Kubernetes 集群?
  • docker实战基础二(Docker基础命令)
  • 015_GUI_in_Matlab中实现GUI开发
  • 【C++】list的使用和list的模拟实现和迭代器失效问题
  • django外键表查询
  • 随手记:小程序体积超出2M包大小如何优化
  • Superset安装
  • World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone
  • RocketMQ高级特性二-消息重试与流控
  • Sentieon 应用教程 | 使用CNVscope进行CNV检测分析
  • 精通Redis-CLI:命令行玩转高效缓存
  • Java设计模式之外观模式详细讲解和案例示范
  • Git分支原理、操作及实际开发中如何规范使用分支
  • pycharm破解教程
  • OD C卷 - 项目排期/最少交付时间
  • java05