zoukankan      html  css  js  c++  java
  • 单链表的操作

    没事多敲敲代码,哈哈

    #include "stdio.h"        
    #include "stdlib.h"   
    #include "time.h" 
    
    typedef struct Node
    {
        int data;
        struct Node *next;
    }Node,* Linklist;
    
    //构造头结点,让L指向头结点 
    int Initlist(Linklist &L)
    {
        L = (Linklist)malloc(sizeof(Node));     //产生头结点,让L指向头结点 
        if(!L){            //内存分配错误 
            return 0;
        }
        L->next = NULL;        //指针域为空 
        return 1; 
    }
    
    //计算Link的长度 
    int ListLength(Linklist L)
    {
        Linklist p;
        int i=0;
        p = L->next;
        while(p){
            p = p->next;
            i++;
        }    
        return i;
    }
    
    int ListTraverse(Linklist L)
    {
        Linklist p;
        p = L->next;
        while(p){
            printf("%d ",p->data); 
            p = p->next;
        }    
        printf("
    ");
        return 1;
    }
    
    
    //在第i个节点(不包括头结点)之前插入新的节点 
    int ListInsert(Linklist &L,int i,int e)
    {
        int j;
        Linklist p,s;
        p = L;   
        j = 1;
        while (p && j < i)     /* 寻找第i个结点 */
        {
            p = p->next;
            ++j;
        } 
        if (!p) 
            return 0;   /* 第i个元素(包括头结点)不存在 */
        s = (Linklist)malloc(sizeof(Node));  /*  生成新结点(C语言标准函数) */
        s->data = e;  
        s->next = p->next;      /* 将p的后继结点赋值给s的后继  */
        p->next = s;          /* 将s赋值给p的后继 */
        return 1;
    }
    
    //头插法 (在链表的第一个节点之前插入新节点) 
    int CreatHead(Linklist &L)
    {
        Linklist p;
        int i;
        srand(time(0));            //初始化随机数种子
        for( i=1;i<10;i++){
            p = (Linklist)malloc(sizeof(Node));    //生成新节点 
            p->data = rand()%100+1;
            p->next = L->next;
            L->next = p;
        } 
        return 1;
    }
    
    //尾插法 
    int CreatTail(Linklist &L)
    {
        Linklist p,r;
        int i;
        r = L;
        for(i=1;i<10;i++){
            p = (Linklist)malloc(sizeof(Node));  //生成新节点 
            p->data = i;
            r->next = p;
            r = p;
        }
        r->next = NULL;
        return 1;
    }
    
    //删除指定的节点 
    int DeleteNode(Linklist &L,int e)
    {
        Linklist p,q;
        q = L; 
        p = L->next;  //指向第一个节点
        while(p && (p->data != e)){  // 查找给定的数字 
            q = p;
            p = p->next;
        } 
        if(!p){       //给定的数字不存在 
            return 0;
        }
        q->next = p->next;
        free(p);
        return 1;
            
    }
    
    int main()
    {
        Linklist L;
        int i,j,num; 
        i = Initlist(L);
    //    printf("%d",i);
    
        printf("Linklist的长度为:%d
    ",ListLength(L));
        
    //    CreatHead(L);          //头插法 
        CreatTail(L);          //尾插法 
        printf("Linklist的长度为:%d
    ",ListLength(L));
        ListTraverse(L);
        printf("请输入你要删除的元素:
    "); 
        scanf("%d",&num);
        i = DeleteNode(L,num);
        if(!i){
            printf("该元素不存在!
    ");
        }
        ListTraverse(L);
    
    
        return 0;
    }
  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/heyijing/p/4821445.html
Copyright © 2011-2022 走看看