C语言——单链表(增删改查)

C语言——单链表(增删改查)

一·链表一

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

typedef struct Test
{
    int data;
    struct  Test *next;
}Link;

Link *head=NULL;

Link* creatHead(Link* head);
void  AddLinkNode(Link* head,Link newnode);
void  printLinkNode(Link *head);
void  deleteLinkNode(Link* head,int data);
void  searchLink(Link* head,int data);
void  searchLink(Link* head,int data);
void  modifiLink(Link* head,int data,int newdata);

int main(int argc,char** argv)
{   
    int i=0;
    Link tmp={0};
    int data=0;
    head=creatHead(head);
    for(i=0;i<5;i++)
    {
        printf("输入第%d个节点的数据\n",i+1);
        scanf("%d",&tmp.data);
        AddLinkNode(head,tmp);
    }
    printLinkNode(head);
    printf("输入要删除的数据\n");
    scanf("%d",&data);
    deleteLinkNode(head,data);
    printLinkNode(head);
    searchLink(head,3);
    modifiLink(head,3,100);
    printLinkNode(head);
    return 0;
}

//创建节点
Link* creatHead(Link* head)
{
    if(head==NULL)
    {
        head=(Link*)malloc(sizeof(Link));
        head->next=NULL;
    }
    return head;
}

//增加节点(尾插法)
void AddLinkNode(Link* head,Link newnode)
{
    Link *p=head;
    Link *new=(Link*)malloc(sizeof(Link));
    while(p->next!=NULL)
    {
        p=p->next;
    }
    memcpy(new,&newnode,sizeof(Link));
    new->next=NULL;
    p->next=new;
}

//遍历链表
void printLinkNode(Link *head)
{
    int cnt=0;
    Link* p=head;
    while(p->next!=NULL)
    {
        cnt++;
        p=p->next;
        printf("%d ",p->data);
    }
    putchar('\n');
}

//删除节点
void deleteLinkNode(Link* head,int data)
{
    Link* p=head;
    Link* tmp=NULL;
    while(p->next!=NULL)
    {
        tmp=p;
        p=p->next;
        if(p->data==data)
        { 
            tmp->next=p->next;
            free(p);
            p=head;
        }
    }
}

//查找节点
void searchLink(Link* head,int data)
{
    Link* p=head;
    while(p->next!=NULL)
    {
        if(p->data==data)
        {
            printf("找到对应的节点:%d\n",p->data);
        }
        p=p->next;
    }
    if(p->next!=NULL)
    {
        printf("未找到对应的节点\n");
    }
}    

//修改节点
void modifiLink(Link* head,int data,int newdata)
{
    Link* p=head;
    while(p->next!=NULL)
    {
        if(p->data==data)
        {
            p->data=newdata;
            printf("把对应的节点修改为:%d\n",p->data);
        }
        p=p->next;
    }
    if(p->next!=NULL)
    {
        printf("未找到对应的节点\n");
    }

}

二·链表二

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

typedef  struct Test  
{
    char name[32];
    int  number;
    struct Test *next;
}Link; 

Link* head=NULL;

Link*creatLinkNode(Link* head);
void AddLinkNode(Link* head,Link data);
void printLinkNode(Link* head);
void deleteLinkNode(Link* head,int num);

int main(int argc,char** argv)
{
    Link data ={"xie",100};
    Link data1={"wen",200};
    Link data2={"hui",300};
    head=creatLinkNode(head);
    AddLinkNode(head,data);
    AddLinkNode(head,data1);
    AddLinkNode(head,data2);
    printLinkNode(head);
    deleteLinkNode(head,200);
    printLinkNode(head);
    return 0;
}

//创建节点
Link* creatLinkNode(Link* head)
{
    if(head==NULL)
    {
        head=(Link*)malloc(sizeof(Link));
        head->next=NULL;
    }
    return   head; 
}

//增加节点(尾插法)
void AddLinkNode(Link* head,Link data)
{
    Link* p=head;
    Link* new=(Link*)malloc(sizeof(Link));
    while(p->next!=NULL)
    {
        p=p->next;
    }
    memcpy(new,&data,sizeof(Link));
    p->next=new;
    new->next=NULL;
}

//遍历链表
void printLinkNode(Link* head)
{
    Link* p=head->next;
    while(p!=NULL)
    {
        printf("%s,%d\n",p->name,p->number);
        p=p->next;
    }
    // putchar('\n');
}

//删除节点
void deleteLinkNode(Link* head,int num)
{
    Link* p=head;
    Link* tmp=NULL;
    while(p->next!=NULL)
    {
        tmp=p;
        p=p->next;
        if(p->number==num)
        {
            tmp->next=p->next;
            free(p);
            p=head;
        }
    }
}

三·链表三

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

typedef struct Test 
{
    char  name[32];
    int number;
    struct Test *next;
}Link;

Link*  head=NULL;
Link* creatLink(Link* head);
void  printLink(Link* head);
void  AddLink(Link* head,Link data);
void  deleteLink(Link* head,int num);
void  saveLink(Link* head);
void  getLink(Link* head);


#if 1
int main(int argc,char** argv)
{
    Link data={"xie",100};
    Link data1={"wen",200};
    Link data2={"hui",300};
    head=creatLink(head);
    AddLink(head,data);
    AddLink(head,data1);
    AddLink(head,data2);
    printLink(head);
    deleteLink(head,100);
    printLink(head);
    saveLink(head);
    getLink(head);
    printLink(head);
    return 0;
}
#endif

#if 0
int main(int argc,char**  argv)
{
    head=creatLink(head);
    getLink(head);
    printLink(head);
    return  0;
}
#endif

Link* creatLink(Link* head)
{
    if(head==NULL)
    {
        head=(Link*)malloc(sizeof(Link));
        head->next=NULL;
    }
    return head;
}

void printLink(Link* head)
{
    /*Link* p=head->next;
                  while(p!=NULL)
                  {
                      printf("%s,%d\n",p->name,p->number);
                      p=p->next;
                  }*/
    Link* p=head->next;
    while(p!=NULL)
    {
        printf("%s,%d\n",p->name,p->number);
        p=p->next;
    }
}

void AddLink(Link* head,Link data)
{ 
    Link* p=head;
    Link* new=(Link*)malloc(sizeof(Link));
    while(p->next!=NULL)
    {
        p=p->next;
    }
    memcpy(new,&data,sizeof(Link));
    p->next=new;
    new->next=NULL;
}

void deleteLink(Link* head,int num)
{
    Link* p=head;
    Link* tmp=NULL;
    while(p->next!=NULL)
    {
        tmp=p;
        p=p->next;
        if(p->number==num)
        {
            tmp->next=p->next;
            free(p);
            p=head;
        }
    }
}

void saveLink(Link* head)
{
    Link* p=head;
    FILE *fp=NULL;
    fp=fopen("./text.txt","w+");
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        return;
    }
    while(p->next!=NULL)
    {
        fwrite(p,1,sizeof(Link),fp);
        p=p->next;
    }
    fclose(fp);
}

/*
            void getLink(Link* head)
            {
                 Link* p=head;
                 Link* new=(Link*)malloc(sizeof(Link));
                 FILE* fp=NULL;
                 Link  data;
                 fp=fopen("./text.txt","rb");
                 if(fp==NULL)
                 {
                    printf("文件打开失败\n");
                    return;
                 }
                 while(!feof(fp))
                 {
                       fread(&data,sizeof(Link),1,fp);
                       AddLink(p,data);
                 }
                 fclose(fp);
            }
            */
/*
            void  getLink(Link* head)
            {
                FILE *fp=NULL;
                Link* p=head;
                Link* new=(Link*)malloc(sizeof(Link));
                new->next=NULL;
                fp=fopen("./text.txt","r+");
                {
                      printf("打开文件失败\n");
                      return ;
                }
                while((fread(new,sizeof(Link),1,fp))==1)
                {
                      p->next=new;
                      p=new;
                      new=(Link*)malloc(sizeof(Link));
                      new->next=NULL;
                }
                free(new);
                fclose(fp);
            }
            */

void getLink(Link* head)
{
    Link* p=head;
    FILE* fp=NULL;
    Link data={0};
    fp=fopen("./text.txt","r+");
    if(fp==NULL)
    {
        printf("文件打开失败\n");
        return;
    }
    while(!feof(fp))
    {
        fread(&data,1,sizeof(Link),fp);
        AddLink(head,data);
    }
    fclose(fp);
}

四·链表四

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

typedef struct ListNode
{
    int data;
    struct ListNode* next;
}ListNode;

//创建节点
ListNode* createNode(int data)
{
    ListNode *node=(ListNode*)malloc(sizeof(ListNode));
    node->data=data;
    node->next=NULL;
    return node;
}

//头插法
ListNode* insertNodeHead(ListNode *head,int data)
{
    ListNode *node=createNode(data);
    node->next=head;
    return node;
}

//尾插法
ListNode *insertNodeTail(ListNode *head,int data)
{
    ListNode* node=createNode(data);
    ListNode* point=head;
    if(head==NULL)
    {
        return NULL;
    }
    while(point->next!=NULL)
    {
        point=point->next;
    }
    point->next=node;
    return head;
}

//删除节点
ListNode* deleteNode(ListNode* head,int data)
{
    ListNode* point=head;
    if(head==NULL)
    {
        return NULL;
    }
    if(head->data==data)
    {
        head=head->next;
        free(point);
        return head;
    }
    while(point->next!=NULL&&point->next->data!=data)
    {
        point=point->next;
    }
    if(point->next!=NULL)
    {
        ListNode* node=point->next;
        point->next=node->next;
        free(node);  
    }
    return head;
}

//修改节点
void updateNode(ListNode* head,int data,int newdata)
{
    ListNode* point=head;
    while(point!=NULL)
    {
        if(point->data==data)
        {
            point->data=newdata;
        }
        point=point->next;
    }
}

//遍历节点
void printNode(ListNode* head)
{
    ListNode* point=head;
    while(point!=NULL)
    {
        printf("%d ",point->data);
        point=point->next;
    }
    putchar('\n');
}

//清楚节点
void clearNode(ListNode* head)
{

    while(head!=NULL)
    {
        ListNode* point=head;
        head=head->next;
        free(point);
    }
}

int main(int argc,char** argv)
{
    ListNode* head=NULL;
    head=insertNodeHead(head,1);
    head=insertNodeHead(head,2);
    head=insertNodeTail(head,3);
    printNode(head); 
    head=deleteNode(head,2);
    printNode(head);
    updateNode(head,1,4);
    printNode(head);
    clearNode(head);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是 C 语言单链表增删改查代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 struct Node { int data; struct Node* next; }; // 定义链表头节点指针 struct Node* head = NULL; // 插入节点函数 void insertNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; if (head == NULL) { head = newNode; } else { struct Node* temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } printf("插入节点成功!\n"); } // 删除节点函数 void deleteNode(int data) { if (head == NULL) { printf("链表为空,无法删除!\n"); return; } struct Node* temp = head; if (temp->data == data) { head = head->next; free(temp); printf("删除节点成功!\n"); return; } while (temp->next != NULL && temp->next->data != data) { temp = temp->next; } if (temp->next == NULL) { printf("未找到要删除的节点!\n"); return; } struct Node* deleteNode = temp->next; temp->next = deleteNode->next; free(deleteNode); printf("删除节点成功!\n"); } // 修改节点函数 void modifyNode(int data, int newData) { if (head == NULL) { printf("链表为空,无法修改!\n"); return; } struct Node* temp = head; while (temp != NULL && temp->data != data) { temp = temp->next; } if (temp == NULL) { printf("未找到要修改的节点!\n"); return; } temp->data = newData; printf("修改节点成功!\n"); } // 查找节点函数 void searchNode(int data) { if (head == NULL) { printf("链表为空,无法查找!\n"); return; } struct Node* temp = head; while (temp != NULL && temp->data != data) { temp = temp->next; } if (temp == NULL) { printf("未找到要查找的节点!\n"); return; } printf("找到要查找的节点,数据为:%d\n", temp->data); } // 打印链表函数 void printList() { if (head == NULL) { printf("链表为空,无法打印!\n"); return; } struct Node* temp = head; printf("链表中的节点数据为:"); while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { insertNode(1); insertNode(2); insertNode(3); printList(); modifyNode(2, 4); printList(); searchNode(3); deleteNode(2); printList(); return 0; } ``` 以上是单链表的基本操作函数,包括插入节点、删除节点、修改节点、查找节点以及打印链表等功能。你可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值