• 数据结构之线性表


    数据结构之线性表

     

    目录

    • 概述
    • 顺表

    特点

    顺表的操作

    准备

    创建顺表

    查询顺表长度

    遍历顺表

    按序查找

    按值查找

    插入

    删除

    • 链表
    • 实际使用

     

    概述

    线性表是一种线性的存储结构,表头有唯一后继元素,表尾有唯一前驱元素,表中的元素既有前驱又有后继

     

    顺表

    特点

    逻辑上存储位置相邻的元素其物理存储位置也相邻

    顺表的操作

    准备

    //定义存储元素的数据类型 

    typedef int DataType;

    //定义数组最大长度

    #define MAX_LENGTH 5

    //全局定义记录当前的顺表长度(<=最大长度)

    int list_length;

    创建顺表

    DataType *createList(){

        int array_dataSource[MAX_LENGTH] = {3,2,5,8,9};

        list_length = 0;

        DataType *array = (DataType *)malloc(MAX_LENGTH*sizeof(DataType));

        for (int i=0; i<MAX_LENGTH; i++) {

            *(array+i) = array_dataSource[i];

            list_length+=1;

        }

        NSLog(@"顺表创建成功!");

        return array;

        }

    查询顺表长度

    int listLength(int *array){

        return list_length;

    } 

    遍历顺表

    void traverseArray(DataType *array){

        if (list_length == 0) {

            NSLog(@"空数组!");

            return;

        }

        for(int i=0;i<list_length;i++){

            printf("%d ",*(array+i));

        }

        printf(" ") 

    }

    按序查找

     DataType searchByOrder(int order,int *array){

        if(order>0&&order<=listLength(array)&&list_length!=0){

            NSLog(@"在序列为%d上的数值为%d",order,*(array+order-1));

            return *(array+order-1);

        }else{

            NSLog(@"输入有误!");

            return -1;

        } 

        return -1; 

    }

    按值查找

    int searchByValue(int value,int *array){

        for(int i=0;i<list_length;i++){

            if(*(array+i)==value){ 

                NSLog(@"数值为%d的序号为%d",value,i+1);

                return i+1; 

            }else{ 

                i+=1; 

            }

        }

        NSLog(@"没有找到!");

        return -1;

    }

    插入(从插入位置开始的每个元素向后移一位,循环从末尾开始到前面)

    BOOL insertValueIntoList(int order,int value,int *array){

            if(list_length>=MAX_LENGTH){

            NSLog(@"数组已满!");

        } 

        else if(order<=0||order>list_length){

            NSLog(@"插入序列有误!"); 

        }

        else{

            for(int i=list_length;i>order-1;i--){

                *(array+i)=*(array+i-1);

            }

            *(array+order-1)=value;

            list_length+=1;

            NSLog(@"插入成功!");

            return YES;

        }

        return NO; 

    }

    删除(从删除位置开始把后一位向前移一位,循环从删除位置开始,当最末尾元素的前一位)

    BOOL deleteValueByOrder(int order,int *array){

        if(list_length<=0){

            NSLog(@"数组为空!");

            return NO;

        }

        else if (order<=0||order>list_length){ 

            NSLog(@"删除位置有错!");

            return NO;

        }

        else{

            for(int i=order-1;i<list_length-1;i++){

                *(array+i)=*(array+i+1);

            }

            list_length-=1;

            NSLog(@"删除成功!");

            return YES;

        }

        return NO;

    } 

    链表

    特点

    逻辑上存储位置相邻的元素其物理存储位置不一定相邻

    链表的操作

    准备

    定义节点的结构体

    typedef struct Node{

    DataType data;  //数据域

    struct Node *next;  //指针域

    }node;

    新建链表

    node *head = (node *)malloc(sizeof(node));

    head->next = nil;

    node *p = head;

    int goOn = YES;

    while(goOn){

    node *n = (node *)malloc(sizeof(node));

    NSLog("请输入");

    scanf("%d",&n->data);

    n->next = p->next; 

    p->next = n;

    p=p->next; 

    goOn = n->data; 

        }

    return head;

    遍历链表

    void traverseList(node *head){

        node *p = head;

        while (p->next!=nil) {

            p=p->next;

            NSLog(@"%d",p->data);

        }

    }

    查询链表长度

    int listLength(node *head){

        node *p = head;

        int i=0;

        while (p->next!=nil) {

            i+=1;

            p=p->next;

        }

        NSLog(@"链表的长度为%d",i);

        return i;

    }

    按序查找

    int searchByOrder(node *head,int order){

        node *p = head;

        int i=0;

        while (p->next!=nil&&i<=order) {

            p=p->next; 

            i+=1;

        } 

        if (i>=order) {

            NSLog(@"序列为%d的数值为%d",i,p->data);

            return p->data;

        }else{

            return 0;

        }

    }

    按值查找

    int searchByValue(node *head,DataType value){

        node *p = head;

        int i=0;

        while (p->next!=nil) {

            p=p->next;

            i+=1;

            if (p->data == value) {

                NSLog(@"数值为%d的序列为%d",value,i);

                return i;

            }

        }

    //没有找到

    return 0;

    }

    插入

    头插入

    尾插入 

    void insertValue(node *head,int value,int order){

        node *p = head;

        int i=0;

        while (p->next!=nil&&i<order-1) { 

            p=p->next;

            i+=1;

        } 

        if (i>=order-1) {

            node *temp = (node *)malloc(sizeof(node));

            temp->data = value;

            temp->next = p->next;

            p->next = temp;

            NSLog(@"插入成功!");

        }else{ 

            NSLog(@"插入失败!");

        }

        return;

    }

    删除

    int deleteValue(node *head,int order){

        node *p = head;

        int i=0;

        int delete_data = 0;

        while (p->next!=nil&&i<order-1) {

            p=p->next;

            i+=1;

        }

        if (i>=order-1) {

            delete_data = p->next->data;

            p->next=p->next->next;

            NSLog(@"删除成功!");

            return delete_data;

        }else{

            NSLog(@"删除失败!");

            return delete_data;

        }

    }

    实际使用

  • 相关阅读:
    线程的资源释放(一)
    iOS开发完整项目
    iOS开发多线程技术方案
    Windows 7 Beta泄漏版存在安全问题 狼人:
    工信部:黑客入侵等是网络安全防护工作的重点 狼人:
    微软下周2将发布13个补丁 修复26个安全漏洞 狼人:
    调查显示互联网14%SSL认证不安全 狼人:
    09年恶意软件放缓 2010年共享最危险 狼人:
    IE曝新安全漏洞 千万网民隐私遭受威胁 狼人:
    安全关注:2009年信息安全八大预测 狼人:
  • 原文地址:https://www.cnblogs.com/IOS-Developer/p/4145856.html
Copyright © 2020-2023  润新知