ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性表:顺序表

2021-08-07 18:33:35  阅读:97  来源: 互联网

标签:顺序 线性表 int List ++ length l1 data


线性表:顺序表
基本算法:按值查找,尾插,指定位置插入,删除,有序表合并

//数据结构 第二章线性表 顺序表
//2021.8.7
//by Walnut from NWU
#include<iostream>
#include<stack>
#include<cmath>
#define MAXSIZE 10
using namespace std;

typedef struct {
    int data[MAXSIZE];
    int length;
}List;

void initList(List* l) {//表的初始化
    l->length = 0;
    for (int i = 0; i < 10; i++) {
        l->data[i] = 0;
    }
}

int insertList(List* l, int n) {//表尾插入,若超过表最大长度,返回-1
    if (l->length == MAXSIZE)
        return -1;
    l->data[l->length] = n;
    l->length++;
}

int insertList(List* l, int pos, int n) {//指定位置插入,失败返回-1
    if (l->length == MAXSIZE)
        return -1;
    for (int i = l->length; i >= pos; i--) {
        l->data[i] = l->data[i - 1];
    }
    l->data[pos - 1] = n;
    l->length++;
}

int delList(List* l, int pos) {//删除指定位置元素,失败返回-1
    if (pos > l->length || l->length == 0)
        return -1;
    for (int i = pos; i < l->length; i++) {
        l->data[i - 1] = l->data[i];
    }
    l->length--;
}

void coutList(List l) {//遍历输出表中元素
    cout << "List: ";
    for (int i = 0;i< l.length; i++) {
        cout << l.data[i] << " ";
    }
    cout << endl;
}

int findList(List l, int n) {//按值查找,返回位置,未找到返回-1
    for (int i = 0; i < l.length; i++) 
        if (l.data[i] == n) 
            return  i + 1;
    return -1;
}

int mergeList(List l1, List l2, List* l3) {//有序表合并
    
    int p1 = 0, p2 = 0, p3 = 0;
    while (p1 < l1.length && p2 < l2.length) {
        if (l1.data[p1 + 1] <= l2.data[p2 + 1]) {
            l3->data[p3] = l1.data[p1];
            p3++;
            p1++;
        }
        else {
            l3->data[p3] = l2.data[p2];
            p3++;
            p2++;
        }
    }
    while (p1 < l1.length) {
        l3->data[p3] = l1.data[p1];
        p3++;
        p1++;
    }
    while (p2 < l1.length) {
        l3->data[p3] = l2.data[p2];
        p3++;
        p2++;
    }
    l3->length = l1.length + l2.length;
    return 0;
}

int main() {
    List l1;
    initList(&l1);
    for (int i = 1; i < 6; i++) {
        insertList(&l1, i);
    }
    insertList(&l1, 4, 10);
    coutList(l1);
    delList(&l1, 5);
    cout << "del pos 5" << endl;
    coutList(l1);
    cout << "pos of 4: " << findList(l1, 4) << endl;

    initList(&l1);
    for (int i = 1; i < 6; i++) {
        insertList(&l1, i*3);
    }
    List l2;
    initList(&l2);
    for (int i = 1; i < 3; i++) {
        insertList(&l2, i + 10);
    }
    List l3;
    initList(&l3);
    mergeList(l1, l2, &l3);
    coutList(l1);
    coutList(l2);
    coutList(l3);
    return 0;
}

标签:顺序,线性表,int,List,++,length,l1,data
来源: https://blog.csdn.net/qq_44849953/article/details/119490744

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有