顺序表

顺序表

线性表的顺序存储结构。
优点是随机访问,即通过首地址和元素序号可在O(1)时间内存取元素、存储密度高。
缺点是插入删除要移动大量元素、必须占用大量连续空间。

代码

#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

#define InitSize 100 
//#define MaxSize 50

//静态分配
// typedef struct{
//     int data[MaxSize];
//     int length;
// }SQlist;

//动态分配
typedef struct{
    int *data;
    int MaxSize,length;
}Sqlist;

//插入元素
bool ListInsert(Sqlist &L,int i, int e){
    if (i < 1 || i > L.length + 1)
        return false;
    if (L.length >= L.MaxSize)
        return false;
    for (int j = L.length; j >= i; j -- )
        L.data[j] = L.data[j - 1];
    L.data[i - 1] = e;
    L.length ++;
    return true;
}

//删除元素
bool ListDelete(Sqlist &L, int i, int &e){
    if (i < 1 || i > L.length + 1)
        return false;
    e = L.data[i - 1];
    for (int j = i; j < L.length; j ++ )
        L.data[j - 1] = L.data[j];
    L.length --;
    return true;
}

//按值查找
int LocateElem(Sqlist L,int e){
    for (int i = 0; i < L.length; i ++ )
        if (L.data[i] == e)
            return i + 1;
    return 0;
}

void PrintList(Sqlist L){
    
    for (int i = 0; i < L.length; i ++ ) cout << L.data[i] << ‘ ‘; cout << endl;
    
}

int main()
{
    Sqlist L;
    L.data = (int *)malloc(sizeof(int) * InitSize);
    L.MaxSize = 1000;
    
    int n;
    cin >> n;
    for (int i = 1; i <= n; i ++ )
    {
        int e;
        cin >> e;
        ListInsert(L,i,e);
    }
    
    PrintList(L);
    
    int de;
    ListDelete(L,3,de);
    
    PrintList(L);
    cout << "已删除元素:" << de << endl;
    
    int se = 5;
    cout << LocateElem(L,se);
    
    return 0;
}
/*
5
1 2 3 4 5
*/

顺序表

上一篇:[Effective JavaScript 笔记] 第9条:始终声明局部变量


下一篇:void 0与undefined