专栏首页工科狗和生物喵【我的漫漫跨考路】数据结构之线性表

【我的漫漫跨考路】数据结构之线性表

正文之前

昨天晚上阶段性的完成了一部分数学的复习(一元积分学终于搞定了,后面的貌似没这么难了),所以今天打算撸一撸代码,结合前几天写的链表实现线性存储,今天花了个把小时实现了线性存储-线性表的实现(我知道还有太多可以优化的地方,但是目前考研只要结果,不看优化,后面要的话我会在复试的准备中学习~~~这算不算立个过初试的Flag?)跪求看完的大神在下面给我贴出优化代码我来学习学习!! 废话不多说,有疑问的,有意见的,咱们评论区见:

正文

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE  5
//注:定义结构体及其指针
typedef struct List   
{
    int Data[MAXSIZE];
    int  Last;
} List, *PtrL;


//注:初始化线性表函数,传入一个表头,之后申请内存,使之成为静态变量

PtrL InitList(PtrL ptrl) 
{
    List *ptrL;

//注:不知道是MAXSIZE 还是不要,不过乘上总归是没错的!
    ptrL=(List *)malloc(MAXSIZE*sizeof(List));  
//注:初始尾指针指向-1,第一次复制就有了Data[0]=Data[Last],方便复用
    ptrL->Last=-1; 
//注:讲初始化后的线性表传回
      return ptrL;
}



//注:插入数值函数,先预判需要插入的地方是否合法
void Insert(PtrL ptrL,int location,int item)
{
    if ( ptrL->Last == MAXSIZE-1 )
    {        /* 表空间已满,不能插入*/
        printf("表空间已满,不能插入");
        return;
    }
    if ( location< 0 || location > ptrL->Last+2)
    {
        /*检查插入位置的合法性*/
        printf("位置不合法");
    }   

//注:在插入位置之后的所有元素统统向后移位,到了location位置之后,传入给定值
    int i=ptrL->Last;
    for (i=ptrL->Last; i >= location; --i)
    {
        ptrL->Data[i+1]=ptrL->Data[i];
    }
    ptrL->Data[location]=item;

//注:尾指针要加一,确保一直指向最后的一个数值
    ptrL->Last+=1;
}

//注:遍历函数,简单易懂,只是一开始忘了尾指针在第一个数值传入的时候等于0,后来想起来了。
void ShowList(PtrL ptrl)
{
    for (int i = 0; i < ptrl->Last+1; i++)
    {
        printf("%d\n 加油啊!?\n",ptrl->Data[i]);
    }
}


int main()
{
    PtrL ptrl;
    ptrl=InitList(ptrl);
    Insert(ptrl,0,5);
    ShowList(ptrl);
    Insert(ptrl,1,4);
    printf("\n--------------\n| \tfuck  \t|\n--------------\n" );
    ShowList(ptrl);
    return 0;
}

我一开始执着于在初始化的过程中直接将整个表给一定程度的赋值,但是后来因为Fill()函数老是给我出岔子,然后我就把他删了,从而用Insert()函数代替。中途又出了通过比较尾指针遍历的时候,因为尾指针从-1开始无法遍历的情况,然后我机智的在比较的时候给为指针的数值加1再进行比较。好吧,我承认是因为我写的不熟练,所以在写的过程中遗漏了这些,以后会慢慢变好的。诚挚邀请大家来见证我的成长!

运行结果:

5
 加油啊!
--------------
|     fuck    |
--------------
5
 加油啊!4
 加油啊!Program ended with exit code: 0

那个Fu*k是因为当时老是出Bug,打了断点但是还没有找出来错误在哪,所以给予这个程序深深地草泥马之冲击~~

正文之后

我决定了,初始写码用sublime,而且神奇的发现很多C的基本语法没有自动补全,这岂不是上天助我?考研的时候那破机器,报错都成问题,自动补全做美梦呢?可以锻炼我的严谨程度,防止习惯了自动补全,自动纠错之后再来写代码就是破破烂烂的那种情况了。不过Xcode的纠错能力很强啊。而且sublime没有单步运行能力,但是Xcode作为苹果当家开发工具,妥妥的!

再多说两句,考研可真不是一个简单的事情,这是比高考更加让人绝望的东西。因为高考之前你全心全意都只能为高考而准备,然而在考研之前有太多太多的东西会来阻挠你。不仅仅是因为没有人监督,没有人共同作战,而且也是因为难度骤增,这些东西你可能已经忘了两三年了(更有甚者几乎等于没学过),再捡起来的时候,就没有当初那么充足的时间来让你慢吞吞的学了。而且连考四门并且每门基本上没有任何关联。光是安排就会让你手足无措。昨天下午的时候,我整个人都萎靡不振,对于微积分的那些东西,也是半天想不出来,只能看答案,我都有点怀疑人生了。但是幸亏,我的阿q精神,还是帮助了我,在网上看了两集[信号]之后,今天又重新开始面对一切。待会儿下午和晚上想把第四章看完,不知道能不能做到!加油吧总之!!

另外,弱弱的求个关注,看官老爷们有话直接留言~我俩随时关注~

本文分享自微信公众号 - 工科狗和生物喵(gh_3507b116a1f8),作者:HustWolf

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【计算机本科补全计划】CCF计算机职业资格认证 2016-09-03(炉石传说)详解

    正文之前 这是2016年九月份的CCF考试的第三题,按照高分标准来算,应该是在30min内解决??然而。我昨晚花了10mins看完了题目,今天上午有限元课的时候...

    用户1687088
  • 【计算机本科补全计划】C++ Primer 第二章 【变量和基本类型】

    正文之前 C++的数据类型包括 算术类型(int double等)和空类型(void),今天发生了一些很可怕的事情,详情请看正文之后!!我好害怕!! 正文 1、...

    用户1687088
  • 【编程能力不行?那就写啊!】数组排序

    今天跟一位本科是计算机的同学聊了。深感差距,问他方法,无他二法,多写即可。一万小时定律从未如此在我的生活中闪耀,没辙,那就写呗。Java跟C++两个版本都来一遍...

    用户1687088
  • Linux私房菜:vi与vim编辑器

    vim还支持同时打开多个文件,用于跨文件操作:vim file1 file2 file*

    happyJared
  • 自由程序员的3个开发技巧

    我们有三个系列的小技巧要分享:与你的客户沟通,保护你的声誉以及解决常见的自由职业问题。下面让我们开始吧!

    哲洛不闹
  • python | 读文件编码问题 | UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 34: illegal mu

    其实,解决方案蛮简单,报错中提示了”gbk”编码问题,那么我们的编码会在哪些地方出问题呢?

    努力在北京混出人样
  • Python正则表达式从入门到实践(2)

    IP 地址范围是0.0.0.0 ~ 255.255.255.255,也就是数字范围是0 ~ 255,如下分步拆解书写思路

    披头
  • 选型宝访谈:看海底捞,如何打造全渠道+全场景的智能客服系统?

    ...

    选型宝
  • [golang] go的typeswitch guard(类型区别)语法和type assertion(类型断言)语法

    最近在实现golang,看到个go的特性语法: typeswitch guard。

    racaljk
  • 好书推荐 — Kubernetes安全分析

    笔者最近在研究容器安全时读到一本关于讲述Kubernetes安全的书籍,作者为LizRice和Michael Hausenbla,两位分别来自美国容器安全厂商A...

    绿盟科技研究通讯

扫码关注云+社区

领取腾讯云代金券