单链表基本操作示例1[C语言实现]

#include <stdio.h>
#include <stdlib.h>

// 定义数据类型
typedef int DataType;

// 定义节点数据类型 同时定义节点指针类型、单链表指针类型
typedef struct node {
    DataType item;
    struct node* next;
} Node, *NodePtr, *SList;


int SL_CreateList(NodePtr *head, int size);
int SL_ListSize(SList list);
int SL_ListRealSize(SList list);
int SL_IsEmpty(SList list);
int SL_Insert(SList list, int pos, DataType item);
int SL_Display(SList list);
int SL_Find(SList list, int *pos, DataType item);
int SL_GetItem(SList list, int pos, DataType *p_item);
int SL_SetItem(SList list, int pos, DataType item);
int SL_Delete(SList list, int pos, DataType *p_item);
int SL_Clear(SList *pList);

/**
 * 主函数
 *
 * @return int
 */
int main() {
    // 头指针
    NodePtr head = NULL;
    int isCreated = SL_CreateList(&head, 5);
    printf("单列表创建结果:%d\n", isCreated);

    SList list = head; // 头指针指向了链表
    // display content of list
    SL_Display(list);

    // size of list
    int size = SL_ListSize(list);
    printf("单链表的长度是%d\n", size);
    size = SL_ListRealSize(list);
    printf("单链表的实际长度是%d\n", size);

    if (SL_IsEmpty(list) == 0) {
        printf("链表内容不是空的\n");
    } else {
        printf("链表内容是空的\n");
    }

    // insert to list
    SL_Insert(list, 1, 20);
    SL_Insert(list, 2, 30);

    size = SL_ListSize(list);
    printf("单链表的长度是%d\n", size);
    size = SL_ListRealSize(list);
    printf("单链表的实际长度是%d\n", size);

    // display content of list
    SL_Display(list);

    // 查找链表中的元素20
    int pos = 0;
    int status = SL_Find(list, &pos, 20);
    if (pos != 0 && status == 1) {
        printf("Item=20的元素位置是%d\n", pos);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单链表是一种常见的数据结构,它由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是C语言实现单链表基本操作示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构 struct Node { int data; struct Node* next; }; // 创建新节点 struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); if (newNode == NULL) { printf("内存分配失败!\n"); exit(1); } newNode->data = data; newNode->next = NULL; return newNode; } // 在链表末尾插入节点 void append(struct Node** head, int data) { struct Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; return; } struct Node* current = *head; while (current->next != NULL) { current = current->next; } current->next = newNode; } // 在链表头部插入节点 void prepend(struct Node** head, int data) { struct Node* newNode = createNode(data); newNode->next = *head; *head = newNode; } // 在指定位置插入节点 void insertAfter(struct Node* prevNode, int data) { if (prevNode == NULL) { printf("前一个节点不能为空!\n"); return; } struct Node* newNode = createNode(data); newNode->next = prevNode->next; prevNode->next = newNode; } // 删除指定数据的节点 void deleteNode(struct Node** head, int data) { struct Node* temp = *head; struct Node* prevNode = NULL; if (temp != NULL && temp->data == data) { *head = temp->next; free(temp); return; } while (temp != NULL && temp->data != data) { prevNode = temp; temp = temp->next; } if (temp == NULL) { printf("未找到要删除的节点!\n"); return; } prevNode->next = temp->next; free(temp); } // 打印链表 void printList(struct Node* head) { struct Node* current = head; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); } // 测试代码 int main() { struct Node* head = NULL; // 插入节点 append(&head,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值