数据结构链串的简单代码实现(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;
}
2.可输入字符串的链串
#define MAX_SIZE 50
typedef struct Node
{
char data[MAX_SIZE + 1];
struct Node* next;
}Node;
//申请空间
Node* createNode(const char* str)
{
Node* newnode = (Node*)malloc(sizeof(Node));
if (newnode == NULL)
{
perror("error");
exit(1);
}
strncpy(newnode->data, str, MAX_SIZE);
newnode->data[MAX_SIZE] = '\0';
newnode->next = NULL;
return newnode;
}
//尾插
void Nodepush(Node** head,const char* str)
{
Node* newnode = createNode(str);
if (newnode == NULL)
{
perror("error");
exit(1);
}
if (*head == NULL)
{
*head = newnode;
}
else
{
Node* ret = *head;
while (ret->next != NULL)
{
ret = ret->next;
}
ret->next = newnode;
}
}
//打印
void printNode(Node** head)
{
Node* ret = *head;
while (ret)
{
printf("%s->", ret->data);
ret = ret->next;
}
printf("NULL\n");
}
//释放
void freeNode(Node** head)
{
Node* ret = *head;
while (ret)
{
Node* count = ret->next;
free(ret);
ret = count;
}
}
int main()
{
Node* head = NULL;
Nodepush(&head, "FanJunXi");
Nodepush(&head, "Love");
Nodepush(&head, "JJ_Lin");
printNode(&head);
freeNode(&head);
}
3第三种链串实现代码
#include <stdio.h>
#include <stdlib.h>
typedef struct StringNode {
char data;
struct StringNode *next;
} StringNode;
StringNode *createStringNode(char data) {
StringNode *newNode = (StringNode *)malloc(sizeof(StringNode));
if (newNode == NULL) {
printf("Error: Unable to allocate memory for string node\n");
return NULL;
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void freeStringNode(StringNode *node) {
if (node == NULL) {
return;
}
free(node);
}
void printString(StringNode *head) {
StringNode *current = head;
while (current!= NULL) {
printf("%c", current->data);
current = current->next;
}
printf("\n");
}
int main() {
StringNode *head = NULL;
StringNode *newNode;
newNode = createStringNode('H');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('e');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('l');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('l');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('o');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode(',');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('W');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('o');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('r');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('l');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('d');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
newNode = createStringNode('!');
if (newNode == NULL) {
return 1;
}
newNode->next = head;
head = newNode;
printf("Linked List Representation of String: ");
printString(head);
StringNode *current = head;
while (current!= NULL) {
StringNode *temp = current;
current = current->next;
freeStringNode(temp);
}
return 0;
}
更多推荐



所有评论(0)