zoukankan      html  css  js  c++  java
  • C语言链表的简单实用

    //
    
    //  ViewController.m
    
    //  链表
    
    //
    
    //  Created by 张凯泽 on 16/1/26.
    
    //  Copyright © 2016年 rytong_zkz. All rights reserved.
    
    //
    
     
    
    #import "ViewController.h"
    
    /*
    
     static 关键字的作用:
    
     (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,
    
     因此其值在下次调用时仍维持上次的值;
    
     (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
    
     (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
    
     它的模块内;
    
     (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
    
     (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
    
     */
    
    typedef struct list{
    
        int num;
    
        struct list * next;
    
    }List;
    
    @interface ViewController ()
    
     
    
    @end
    
     
    
    @implementation ViewController
    
     
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
    //    int a =[self lianbiao];
    
    //    printf(@"______________%d",a);
    
        
    
        
    
        
    
    }
    
    -(void)stransition:(int**)p
    
    {
    
        printf("p = %p
    ",p);
    
    }
    
    -(int)lianbiao
    
    {
    
        List * head = NULL;
    
        //int i = 0;
    
        head = initList();
    
        printf("head = %p",head);
    
        if (head == NULL) {
    
            return -1;
    
        }
    
        insertList(&head ,2);
    
        insertList(&head ,4);
    
        insertList(&head ,6);
    
        insertList(&head ,3);
    
        insertList(&head ,1);
    
        priList(head);
    
        deleteList(&head ,1);
    
        priList(head);
    
        deleteList(&head ,2);
    
        priList(head);
    
        deleteList(&head ,3);
    
        priList(head);
    
        freeList(&head);
    
        return 0;
    
    }
    
    //初始化链表
    
    static List * initList()
    
    {
    
        List * list = NULL;
    
        list = (List*)malloc(sizeof(List));
    
        if (list == NULL) {
    
            return NULL;
    
        }
    
        list ->next = NULL;
    
        return list;
    
    }
    
    //打印链表信息
    
    static void priList(List* list)
    
    {
    
        if (list == NULL) {
    
            return;
    
            printf("------------
    ");
    
        }
    
        while (list ->next) {
    
            printf("%d
    ",list -> next ->num);
    
            list = list -> next;
    
        }
    
        printf("-----------
    ");
    
        return;
    
    }
    
     
    
    //根据num大小插入链表节点
    
    static int insertList(List** list , int num)
    
    {
    
        List * now = NULL;
    
        List * head = *list;//这里*list的地址就是 刚开始初始化获得地址head的地址
    
        now = initList();
    
        if (now == NULL) {
    
            return -1;
    
        }
    
        now -> num = num;
    
        while (head ->next && num >= head -> next -> num) {
    
            head = head ->next;
    
        }
    
        if (head -> next == NULL) {
    
            head -> next = now;
    
            
    
        }else{
    
            now -> next = head -> next;
    
            head -> next = now;
    
        }
    
        return 0;
    
    }
    
    //计算链表的长度
    
    static int numList (List * head)
    
    {
    
        int len = 0;
    
        while (head && head -> next) {
    
            len ++ ;
    
            head = head -> next;
    
        }
    
        return len;
    
        
    
    }
    
    //调用free 逐个释放链表的节点
    
    static void freeList(List** list)
    
    {
    
        List* head = *list;
    
        List* p = NULL;
    
        while (head) {
    
            p = head;
    
            head = head ->next;
    
            free(p);
    
        }
    
        printf("free List ok 
    ");
    
        return;
    
    }
    
    //删除对应位置的节点
    
    static int deleteList(List** list , int location)
    
    {
    
        List * head = *list;
    
        List* p = NULL;
    
        int i = 1;
    
        if (location <= 0 || location > numList(head)) {
    
            return -1;
    
        }
    
        while (i++ <location && head -> next) {
    
            head = head -> next;
    
            
    
        }
    
        p = head -> next;
    
        head -> next = p -> next;
    
        if (p) {
    
            free(p);
    
            p = NULL;
    
        }
    
        return 0;
    
        
    
    }
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
    @end
    
     
  • 相关阅读:
    logback 常用配置详解(二) <appender>
    logback 配置详解(一)
    logstash报错如下:Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [999]/[1000] maximum shards open
    从字节码角度分析Byte类型变量b++和++b
    接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?
    计算1至n中数字X出现的次数
    转:轻松搞定面试中的红黑树问题
    转:40个Java集合面试问题和答案
    自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟
    何时调用getView?——从源码的角度给出解答
  • 原文地址:https://www.cnblogs.com/zkzzkz/p/5161815.html
Copyright © 2011-2022 走看看