当前位置: 首页 > 编程日记 > 正文

数据结构之线性表

数据结构之线性表

目录

  • 概述
  • 顺表

特点

顺表的操作

准备

创建顺表

查询顺表长度

遍历顺表

按序查找

按值查找

插入

删除

  • 链表
  • 实际使用

概述

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

顺表

特点

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

顺表的操作

准备

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

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\t",*(array+i));

    }

    printf("\n") 

}

按序查找

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;

    }

}

实际使用

转载于:https://www.cnblogs.com/IOS-Developer/p/4145856.html

相关文章:

【BZOJ-3456】城市规划 CDQ分治 + NTT

题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id3456 Solution 这个问题可以考虑dp&#xff0c;利用补集思想 N个点的简单图总数量为$2^{\binom{N}{2}}$&#xff0c;要求的是简单联通图&#xff0c;所以可以用总量减不连通的。 不连通的可以通过枚举与某个固定点的…

微信小程序获取openid和session_key并且把openid存入数据库

微信小程序开发交流qq群 581478349 微信小程序获取openid和session_key并且把openid存入数据库。已经调用openid的demo 前后端代码都有&#xff0c;后端php实现 在其它地方同步调用openid。&#xff08;确保用户完成登录再进行后续的操作&#xff09;&#xff1b; onLoad…

如何通过五个简单步骤成为更好的Stack Overflow用户

by Artem Stepanenko由Artem Stepanenko 如何通过五个简单步骤成为更好的Stack Overflow用户 (How to become a better Stack Overflow user in five simple steps) Software developers cannot imagine their lives without Stack Overflow.没有堆栈溢出&#xff0c;软件开发…

wm_concat

select org_name,department,to_char(wm_concat(ebs_org_num)) from GHB.org_add_tmp group by org_name,department ; 转载于:https://www.cnblogs.com/pier22/p/6546726.html

5 MySQL索引

目录&#xff1a; 1. 索引概述 1.1 为什么引入索引 1.2 什么是索引 1.3 索引的好处 1.4 索引的不足 1.5 索引分类 2. 索引设计原则 3. 索引建立和删除 3.1 索引创建 3.2 索引删除 4. 索引实验 1. 索引概述 1.1 为什么引入索引[1] 问题&#xff1a;假设数据库中一个表有10^6条记…

js多维数组渲染HTML js for循环渲染页面

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 直接上代码&#xff0c;有不懂的可以留言。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><script src"https://cdn.bootcss.com/jquery/2.1.1/jquery…

使用TensorFlow跟踪千年猎鹰

by Nick Bourdakos由Nick Bourdakos 使用TensorFlow跟踪千年猎鹰 (Tracking the Millennium Falcon with TensorFlow) At the time of writing this post, most of the big tech companies (such as IBM, Google, Microsoft, and Amazon) have easy-to-use visual recognition…

POJ2387 Til the Cows Come Home -DIJKSTRA 练习

题目大意是&#xff1a;有N个牛棚和T条边相连&#xff0c;每条边有个权值&#xff0c;问1号到N号牛棚之间的最短距离 本题是又是DIJKSTRA最短路水题&#xff0c;注意任何两个牛棚之间可能有多条路相连&#xff0c;输入时先输入边&#xff0c;再输入点&#xff0c;程序如下&…

<a>标签带参数跳转并在下一个页面接收

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; <a href"home.html?id1">跳转</a> //home.html <script type"text/javascript"> var aGetRequest();console.log("id:"a[id]) //…

Linux上PHP加入环境变量

export PATH$PATH:/usr/local/php/bin转载于:https://www.cnblogs.com/ttiandeng/p/6554902.html

计算机本科学位有用吗_我应该回到学校获得计算机科学学位吗?

计算机本科学位有用吗by Preethi Kasireddy通过Preethi Kasireddy 我应该回到学校获得计算机科学学位吗&#xff1f; (Should I go back to school to get a Computer Science degree?) This week’s question for my “Ask Preethi’ series is one that’s near and dear t…

[bzoj1054][HAOI2008]移动玩具

题意&#xff1a;在一个4*4的方框内摆放了若干个相同的玩具&#xff0c;某人想将这些玩具重新摆放成为他心中理想的状态&#xff0c;规定移动 时只能将玩具向上下左右四个方向移动&#xff0c;并且移动的位置不能有玩具&#xff0c;请你用最少的移动次数将初始的玩具状态移动到…

微信小程序实现滑动tab切换和点击tab切换并显示相应的数据(附源代码)

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; 先上效果图&#xff1a; 这里主要用到了swiper组件和三目运算&#xff0c;直接上代码&#xff0c; 样式只有三个class&#xff0c;简单粗暴&#xff0c;懒的小伙伴们可以直接拿来用&a…

使用java.util.Timer来周期性的执行制定的任务

使用java.util.Timer来周期性的执行制定的任务 1 public class HandlerTest extends Activity {2 int[] images new int[] {3 R.drawable.baiyang, R.drawable.jinniu, R.drawable.shuangyu4 };5 6 int currentImageID 0;7 8 Override9 prot…

数据库更行通知_哪个更好? 数据驱动还是数据通知?

数据库更行通知by Casper Sermsuksan由Casper Sermsuksan 哪个更好&#xff1f; 数据驱动还是数据通知&#xff1f; (Which is better? Data-Driven or Data-Informed?) I recently spoke at the Tech in Asia Product Development Conference in Jakarta about being data-…

从某一日期开始过day天的日期

一个SX问我的&#xff0c;我就写了写......从2010.1.1开始&#xff0c;给了一组测试数据3的话输出2010.1.4星期1&#xff0c;所以说2010.1.1是星期五&#xff0c;总星期就是 (day5)%70?7:(day5)%7下面是代码...... #include <iostream> #include <stdlib.h> using…

dhtmlxgrid表格笔记

因为公司以前架构的需求&#xff0c;所以对于dhtmlxgrid进行了简单的学习&#xff0c;参照dhtmlxgrid给出的例子进行摸索 1、必须引入的js包 <link rel"STYLESHEET" type"text/css" href"css/dhtmlxgrid.css"> <link rel"stylesh…

配置 腾讯云 SSL 证书 SSL证书实现https,环境:phpStudy下Apache环境

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; SSL证书实现https&#xff0c;环境&#xff1a;phpStudy下Apache环境 前提条件&#xff1a; 1.申请并下载好腾讯云申请的免费 ssl证书 腾讯云免费证书申请地址&#xff1a; http…

把canvas放在盒子内_如何将您的专业知识放在盒子中并出售

把canvas放在盒子内At RISE Conf in Hong Kong, Gary Vaynerchuk was asked:在香港的RISE Con​​f会议上&#xff0c; 加里韦纳楚克被问到&#xff1a; How do I make a living off my passion?我如何以激情为生&#xff1f; The answer from the marketing mogul was strai…

bzoj 4771: 七彩树 树链的并+可持久化线段树

题目大意: 给定一颗树,询问树中某个点x的子树中与其距离不超过d的所有点中本质不同的颜色数 强制在线 题解: 一下午终于把这道题叉掉了。 写了三个算法,前两个都是错的,后一个是%的网上大爷们的题解. 首先我们发现这道题有一个特点:没有修改操作 !! 这就使我们能够对颜色进行预…

Chapter 0: 引论

引论我之前就看过了&#xff0c;在我刚买到这本书的时候。 而我买这本书的日子&#xff0c;已经是两年前了。我就是这样子的&#xff0c;我买了好多好多关于技术的书&#xff0c;这些书都是很贵很贵的&#xff0c;可是买完回来之后就看了第一章&#xff0c;然后就一直丢在一边&…

开发常用CSS

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; keyframes -> 使 div 元素匀速向下移动 div{animation:myanimation 5s infinite;} keyframes myanimation {from {top:0px;}to {top:200px;}} 注:animation ->Css3动画属性 …

javascript网络_没有JavaScript的网络外观

javascript网络A Berlin-based web developer — who codes JavaScript for a living — decided to go an entire day without JavaScript.一家位于柏林的网络开发人员(为JavaScript编写代码为生)决定不使用JavaScript进行一整天的工作。 Let’s face it — in an insane wor…

js中的各种宽高以及位置总结

在javascript中操作dom节点让其运动的时候&#xff0c;常常会涉及到各种宽高以及位置坐标等概念&#xff0c;如果不能很好地理解这些属性所代表的意义&#xff0c;就不能理解js的运动原理&#xff0c;同时&#xff0c;由于这些属性概念较多&#xff0c;加上浏览器之间 实现方式…

关于百度编辑器UEditor在asp.net中的使用方法!

为了完成自己想要的功能效果&#xff0c;在项目中使用到了百度编辑器&#xff0c;为了搞明白&#xff0c;苦心学习查资料搞了整整一天&#xff0c;总结一下。 在asp.net 的项目中目前我觉得有两种情况&#xff0c;一种是没有使用模板页的&#xff0c;一种是使用了模板页的&…

微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; 先上效果图&#xff0c;再附上完整源码&#xff1a; 1.多张图片循环渲染后预览、保存、识别带参数二维码 <view wx:for"{{imgalist}}" class"previewimg">…

vba编程教程视频教程_我已经完成了编程教程。 怎么办?

vba编程教程视频教程by Preethi Kasireddy通过Preethi Kasireddy 我已经完成了编程教程。 怎么办&#xff1f; (I’ve done programming tutorials. Now what?) This week’s question for my Ask Preethi series is about how to go from simply doing tutorials to the act…

【官方文档】Nginx负载均衡学习笔记(二)负载均衡基本概念介绍

简介 负载均衡&#xff08;Server Load Balancer&#xff09;是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力&#xff0c;通过消除单点故障提升应用系统的可用性。 负载均衡主要有如下几个功能点&#x…

微信小程序本地缓存

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 正文&#xff1a; 关于微信小程序本地缓存&#xff0c;做一下笔记&#xff0c;希望能够帮助到看到这篇分享的人 //index.js 这里是保存 var a 1 wx.setStorageSync(a, a) //logo.js 这里是取保存的…

css 形状_在CSS形状之外思考

css 形状CSS is based off a box model. If you have an image that is a circle that you want to wrap text around, it will wrap around the images’ bounding box.CSS基于盒模型。 如果您要环绕的图像是一个圆&#xff0c;则它将环绕图像的边界框。 外型 (Shape-outside…