c语言 顺序表

#include <stdio.h>

#include <stdlib.h> 

struct Node {
     int data;
     struct Node* next; 
};

 typedef struct Node node;

 node* createNode(int data) {
     node* newNode = (node*)malloc(sizeof(node));
     newNode->data = data; newNode->next = NULL;
     return newNode;
 }

void insertAtBeginning(node** headRef, int data) {
    node* newNode = createNode(data);
    newNode->next = *headRef; *headRef = newNode;
}

void insertAtEnd(node** headRef, int data) {
    node* newNode = createNode(data);
    
    if (*headRef == NULL) {
         *headRef = newNode; return; 
    }
 
    node* temp = *headRef;
    while (temp->next != NULL) {
        temp = temp->next; 
    }
    temp->next = newNode; 
} 

void deleteNode(node** headRef, int key) { 
    node* temp = *headRef; 
    node* prev = NULL; 
    
    if (temp != NULL && temp->data == key) {
         *headRef = temp->next; 
         free(temp); return; 
    }
     
    while (temp != NULL && temp->data != key) {
         prev = temp; temp = temp->next; 
    } 
    
    if (temp == NULL) {
        printf("Node with key %d not found.\n", key); 
        return; 
    } 
    
    prev->next = temp->next; 
    free(temp); 
} 
    
    void printList(node* head) {
         node* temp = head; while (temp != NULL) {
             printf("%d ", temp->data); 
             temp = temp->next; 
         }
 
         printf("\n"); 
    } 

int main() {
    node* head = NULL; 
    insertAtBeginning(&head, 3); 
    insertAtBeginning(&head, 2); 
    insertAtEnd(&head, 4); 
    insertAtEnd(&head, 5); 
    printList(head); 
    deleteNode(&head, 2); 
    printList(head); 
    deleteNode(&head, 6); 
    printList(head); 
    return 0; 
} 

我的代码实现了单向链表的常见操作,包括创建新节点、在链表头部和尾部插入节点、删除特定节点以及打印整个链表。

学习链表的实现需要理解链表的基本概念和操作。链表是一种数据结构,它由一系列节点组成,每个节点都包含数据和指向下一个节点的指针。相比于数组,链表的大小可以动态变化,但是访问链表中的元素需要遍历整个链表。在学习链表的实现过程中,需要理解以下几个关键概念:

节点:链表中的基本单元,每个节点包含数据和指向下一个节点的指针。

头节点:链表中的第一个节点,通常用一个指针变量表示整个链表。

尾节点:链表中的最后一个节点,它的指针指向 NULL。

遍历:访问链表中的所有节点,通常使用循环结构实现。

插入:这个函数的实现与插入节点到链表头部的函数类似,首先创建新节点,然后找到链表末尾并将其指针指向新节点。如果链表为空,则将新节点作为链表的头节点。

学习总结:


学习链表实现的过程中,需要注意以下几个方面:

1 熟悉指针的概念和使用方法。链表中的每个节点都包含一个指向下一个节点的指针,因此在操作链表时需要频繁使用指针。


2 熟悉动态内存分配的方法。链表的大小可以动态变化,因此需要使用动态内存分配函数(如malloc)来分配节点的内存空间。


3 注意边界情况的处理。在插入、删除、遍历等操作中,需要特别注意链表为空或只包含一个节点的情况。


4 理解链表的基本操作和算法。链表的基本操作包括插入、删除、遍历等,还有一些高级算法如快慢指针和递归等,这些都是学习链表实现的重点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值