线性表与链表复习

线性表的定义

struct Book {
    string id;//ISBN
    string name;//书名
    double price;//定价
};
typedef struct {
    Book *elem; //存储空间的基地址
    int length; //当前长度
} SqList;

线性表的初始化

Status InitList_Sq(SqList &L) { //算法2.1 顺序表的初始化
    //构造一个空的顺序表L
    L.elem = new Book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
    if (!L.elem)
        exit(OVERFLOW); //存储分配失败退出
    L.length = 0; //空表长度为0
    return OK;
}

线性表的查找

int LocateElem_Sq(SqList L, double e) { //算法2.3 顺序表的查找
    //顺序表的查找
    for (int i = 0; i < L.length; i++)
        if (L.elem[i].price == e)
            return i + 1;//查找成功,返回序号i+1
    return 0;//查找失败,返回0
}

线性表的插入

Status ListInsert_Sq(SqList &L, int i, Book e) { //算法2.4 顺序表的插入
    //在顺序表L中第i个位置之前插入新的元素e
    //i值的合法范围是1<=i<=L.length+1
    if ((i < 1) || (i > L.length + 1))
        return ERROR; //i值不合法
    if (L.length == MAXSIZE)
        return ERROR; //当前存储空间已满
    for (int j = L.length - 1; j >= i - 1; j--)
        L.elem[j + 1] = L.elem[j]; //插入位置及之后的元素后移
    L.elem[i - 1] = e; //将新元素e放入第i个位置
    ++L.length; //表长增1
    return OK;
}Status ListInsert_Sq(SqList &L, int i, Book e) { //算法2.4 顺序表的插入
    //在顺序表L中第i个位置之前插入新的元素e
    //i值的合法范围是1<=i<=L.length+1
    if ((i < 1) || (i > L.length + 1))
        return ERROR; //i值不合法
    if (L.length == MAXSIZE)
        return ERROR; //当前存储空间已满
    for (int j = L.length - 1; j >= i - 1; j--)
        L.elem[j + 1] = L.elem[j]; //插入位置及之后的元素后移
    L.elem[i - 1] = e; //将新元素e放入第i个位置
    ++L.length; //表长增1
    return OK;
}

线性表的删除

Status ListDelete_Sq(SqList &L, int i) { //算法2.5 顺序表的删除
    //在顺序表L中删除第i个元素,并用e返回其值
    //i值的合法范围是1<=i<=L.length
    if ((i < 1) || (i > L.length))
        return ERROR; //i值不合法
    for (int j = i; j <= L.length; j++)
        L.elem[j - 1] = L.elem[j]; //被删除元素之后的元素前移
    --L.length; //表长减1
    return OK;
}

链表的定义

struct Book {
    string id;//ISBN
    string name;//书名
    double price;//定价
};
typedef struct LNode {
    Book data; //结点的数据域
    struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型

链表的初始化

Status InitList_L(LinkList &L) { //算法2.6 单链表的初始化
    //构造一个空的单链表L
    L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
    L->next = NULL; //头结点的指针域置空
    return OK;
}

链表的查找

Status GetElem_L(LinkList L, int i, Book &e) { //算法2.7 单链表的取值
    //在带头结点的单链表L中查找第i个元素
    //用e返回L中第i个数据元素的值
    int j;
    LinkList p;
    p = L->next;
    j = 1; //初始化,p指向第一个结点,j为计数器
    while (j < i && p) { //顺链域向后扫描,直到p指向第i个元素或p为空
        p = p->next; //p指向下一个结点
        ++j; //计数器j相应加1
    }
    if (!p || j > i)
        return ERROR; //i值不合法i>n或i<=0
    e = p->data; //取第i个结点的数据域
    return OK;
} //GetElem_L

链表的删除

Status ListDelete_L(LinkList &L, int i) { //算法2.9 单链表的删除
    //在带头结点的单链表L中,删除第i个位置    
    LinkList p, q;
    int j;
    p = L;
    j = 0;
    while ((p->next) && (j < i - 1)) //查找第i?1个结点,p指向该结点
    {
        p = p->next;
        ++j;
    }
    if (!(p->next) || (j > i - 1))
        return ERROR; //当i>n或i<1时,删除位置不合理 
    q = p->next; //临时保存被删结点的地址以备释放 
    p->next = q->next; //改变删除结点前驱结点的指针域 
    delete q; //释放删除结点的空间 
    --length;
    return OK;
} //ListDelete_L

链表的插入

Status ListInsert_L(LinkList &L, int i, Book &e) { //算法2.9 单链表的插入
    //在带头结点的单链表L中第i个位置插入值为e的新结点
    int j;
    LinkList p, s;
    p = L;
    j = 0;
    while (p && j < i - 1) {
        p = p->next;
        ++j;
    }//查找第i?1个结点,p指向该结点
    if (!p || j > i - 1)
        return ERROR; //i>n+1或者i<1
    s = new LNode; //生成新结点*s 
    s->data = e; //将结点*s的数据域置为e
    s->next = p->next; //将结点*s的指针域指向结点ai
    p->next = s; //将结点*p的指针域指向结点*s
    ++length;
    return OK;
}

头插法

尾插法

全部评论

相关推荐

07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务