数据结构之线性表

数据结构之线性表

线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。  线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。

特征:

1.集合中必存在唯一的一个“第一元素”;
2.集合中必存在唯一的一个 “最后元素” ;
3.除最后一个元素之外,均有 唯一的后继(后件);
4.除第一个元素之外,均有 唯一的前驱(前件)。

1. 线性表的顺序表示:ArrayList

一般使用数组(C语言中的数组采用顺序存储方式。即连续地址存储)来描述。

线性表的顺序储存结构是一种随机存取的存储结构

优点:在于随机访问元素

缺点:插入和和删除的时候,需要移动大量的元素。

代码:



#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
//宏定义
#define TRUE   1
#define FALSE   0
#define OK    1
#define ERROR   0
#define INFEASIBLE -1
#define OVERFLOW -2

#define LT(a,b)   ((a)<(b))
#define N = 100       

#define LIST_INIT_SIZE 100 //线性表初始空间分配量
#define LISTINCREMENT   10 //线性表空间分配的增量

typedef int Status;
typedef int ElemType;

typedef struct LNode{
    ElemType  *elem;        //存储空间的基地址
    int      lenght;        //当前的长度
    int      listsize;      //当前分配的存储容量
}SqList;

/**
 *构造空的线性表
 */

Status initList(SqList &L, int lenght){
    if (lenght == 0) lenght = LIST_INIT_SIZE;
    L.elem = (ElemType *)malloc(lenght * sizeof(ElemType));
    if(!L.elem) exit(OVERFLOW);  //分配存储空间失败
    L.lenght = 0;                //初始空表长度为0
    L.listsize = lenght ;//初始存储容量为100
    return OK;
}
/************************************************************************/
/* 在第i位置插入e
*/
/************************************************************************/
Status insertList(SqList &L, ElemType e, int i){
    ElemType *p,  *q;
    if(i<0 ||i > L.lenght) return ERROR;  //i值不合法
    if (L.lenght >= L.listsize) {
        ElemType *newbase = (ElemType *)realloc(L.elem ,(L.listsize +LISTINCREMENT)*sizeof(ElemType));
        if(!newbase) return OVERFLOW;   //存储分配失败  
        L.elem = newbase;               //新基值
        L.listsize += LISTINCREMENT;    //增加存储容量
    }
    q = &L.elem[i];                     //q为插入的位置
    for (p = &L.elem[L.lenght]; p>=q; --p) {
        *p = *(p-
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值