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;
    }
  • 相关阅读:
    二叉树序列化和反序列化
    js推箱子
    查找一个二叉树的后继节点
    采用非递归方式遍历二叉树
    采用递归方式遍历二叉树
    判断两个单向链表是否相交
    拷贝带随机指针的链表
    将单向链表按某值划分成左边小,中间相等,右边大的形式
    滑动窗口求最大值
    给定一个只包含字符’(’,’)’,’{’,’}’,’[‘和’]'的字符串,判断输入字符串是否有效
  • 原文地址:https://www.cnblogs.com/heyijing/p/4821445.html
Copyright © 2011-2022 走看看