zoukankan      html  css  js  c++  java
  • 单链表的初始化 建立 插入 查找 删除(转自newwy)

    ////////////////////////////////////////////
    //单链表的初始化,建立,插入,查找,删除。//
    //Author:Wang Yong                        //    
    //Date: 2010.8.19                         //
    //////////////////////////////////////////// 
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef int ElemType;
    //////////////////////////////////////////// 
     
    //定义结点类型 
    typedef struct Node
    {
        ElemType data;              //单链表中的数据域 
        struct Node *next;          //单链表的指针域 
    }Node,*LinkedList;
     
    //////////////////////////////////////////// 
     
    //单链表的初始化
     
    LinkedList LinkedListInit()
    {
        Node *L;
        L = (Node *)malloc(sizeof(Node));   //申请结点空间 
        if(L == NULL)                       //判断是否有足够的内存空间 
            printf("申请内存空间失败
    ");
        L->next = NULL;                  //将next设置为NULL,初始长度为0的单链表 
    }
     
    //////////////////////////////////////////// 
     
    //单链表的建立1,头插法建立单链表
     
    LinkedList LinkedListCreatH()
    {
        Node *L;
        L = (Node *)malloc(sizeof(Node));   //申请头结点空间
        L->next = NULL;                      //初始化一个空链表
         
        ElemType x;                         //x为链表数据域中的数据
        while(scanf("%d",&x) != EOF)
        {
            Node *p;
            p = (Node *)malloc(sizeof(Node));   //申请新的结点 
            p->data = x;                     //结点数据域赋值 
            p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL 
            L->next = p; 
        }
        return L; 
    } 
     
    //////////////////////////////////////////// 
     
    //单链表的建立2,尾插法建立单链表
     
    LinkedList LinkedListCreatT()
    {
        Node *L;
        L = (Node *)malloc(sizeof(Node));   //申请头结点空间
        L->next = NULL;                  //初始化一个空链表
        Node *r;
        r = L;                          //r始终指向终端结点,开始时指向头结点 
        ElemType x;                         //x为链表数据域中的数据
        while(scanf("%d",&x) != EOF)
        {
            Node *p;
            p = (Node *)malloc(sizeof(Node));   //申请新的结点 
            p->data = x;                     //结点数据域赋值 
            r->next = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL 
            r = p; 
        }
        r->next = NULL; 
         
        return L;   
    }
     
    //////////////////////////////////////////// 
     
    //单链表的插入,在链表的第i个位置插入x的元素
     
    LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)
    {
        Node *pre;                      //pre为前驱结点 
        pre = L;
        int tempi = 0;
        for (tempi = 1; tempi < i; tempi++)
            pre = pre->next;                 //查找第i个位置的前驱结点 
        Node *p;                                //插入的结点为p
        p = (Node *)malloc(sizeof(Node));
        p->data = x; 
        p->next = pre->next;
        pre->next = p;
         
        return L;                           
    } 
     
    //////////////////////////////////////////// 
     
    //单链表的删除,在链表中删除值为x的元素
     
    LinkedList LinkedListDelete(LinkedList L,ElemType x)
    {
        Node *p,*pre;                   //pre为前驱结点,p为查找的结点。 
        p = L->next;
        while(p->data != x)              //查找值为x的元素 
        {   
            pre = p; 
            p = p->next;
        }
        pre->next = p->next;          //删除操作,将其前驱next指向其后继。 
        free(p);
        return L;
    } 
     
    /////////////////////////////////////////////
     
    int main()
    {
        LinkedList list,start;
    /*  printf("请输入单链表的数据:"); 
        list = LinkedListCreatH();
        for(start = list->next; start != NULL; start = start->next)
            printf("%d ",start->data);
        printf("
    ");
    */  printf("请输入单链表的数据:"); 
        list = LinkedListCreatT();
        for(start = list->next; start != NULL; start = start->next)
            printf("%d ",start->data);
        printf("
    ");
     
        int i;
        ElemType x;
        printf("请输入插入数据的位置:");
        scanf("%d",&i);
        printf("请输入插入数据的值:");
        scanf("%d",&x);
        LinkedListInsert(list,i,x);
        for(start = list->next; start != NULL; start = start->next)
            printf("%d ",start->data);
        printf("
    ");
        printf("请输入要删除的元素的值:");
        scanf("%d",&x);
        LinkedListDelete(list,x); 
        for(start = list->next; start != NULL; start = start->next)
            printf("%d ",start->data);
        printf("
    ");
         
        return 0;
    } 
  • 相关阅读:
    SpringMVC
    MyBatis 与 Spring 的完美整合方法
    持久层之 MyBatis: 第三篇 :缓存 And 高级查询
    持久层之 MyBatis: 第二篇 :动态SQL And多表查询
    C语言实现简单epoll服务器(二)
    C语言简单实现epoll服务器(一)
    shell编程题(十九)
    shell编程题(十七)
    shell编程题(十六)
    shell编程题(十三)
  • 原文地址:https://www.cnblogs.com/iamxiaoyubei/p/5064859.html
Copyright © 2011-2022 走看看