线性表的基本操作(一)

来源:互联网 发布:sql查询分析器在哪里 编辑:程序博客网 时间:2024/05/22 10:55

线性表的定义
线性表是具有相同特性数据元素的一个有限序列。该序列中所含元素的个数叫做线性表的长度(n)。注意:n可以等于0,表示线性表是一个空表。空表也可以作为线性表。线性表可分为顺序表和链表,本篇文章中以顺序表为主。
1.顺序表的结构定义

#define maxSize 100typedef struct{    int data[maxSize];//存放顺序表元素的数组    int length;//存放顺序表的长度}Sqlist;

2.顺序表的算法操作
2.1初始化顺序表
只需将length设置为0。

void initList(Sqlist &L){    L.length=0;}

2.2返回第一个比x大的元素的位置

int locateElem(Sqlist L,int x){    int i;    for(i=1;i<L.length;i++){        if(x<L.data[i]){            return i;        }    }    return i;}

元素的下标从1开始,0是空位置,不存放数据。
在顺序表中查找第一个值等于e的元素,返回其下标。

int locateElem(Sqlist L,int e){    int i;    for(i=1;i<L.length;i++){        if(e==L.data[i]){            return i;        }    }    return 0;}

2.3插入元素
思路解析:找到插入位置之后,将插入位置以及其以后的元素向后移动一个元素的位置即可。
注意:移动元素的时候先移动最右边的元素,如果先移动最左边的元素则右边的元素会被左边的元素覆盖(如图)
这里写图片描述

void insert(Sqlist &L,int x){    int p,i;    p = locateElem(L,x);//调用locateElem()函数来找到插入位置p    for(i=L.length;i>=p;i--){        L.data[i+1]=L.data[i];//元素右移一个位置    }    L.data[p]=x;//将x放在插入位置p上    ++(L.length);//表内元素多了一个,故表长自增1}

在顺序表L的第p(1<=p<=length)个位置上插入新元素e。如果p的位置不正确,返回0(插入失败);如果p正确,则将顺序表第p个元素以及以后元素右移一个位置,腾出一个空位置来插入新元素,顺序表长度自增1,插入成功返回1。

int insert(Sqlist &L,int p,int e){    int i;    //位置错误,表长已最大    if(p<1||p>L.length||L.length==maxSize-1){        return 0;    }    for(i=L.length;i>=p;i--){        L.data[i+1]=L.data[i];    }    L.data[p]=e;    ++(L.length);    return 1;}

2.4获取指定位置的元素
用e返回L中的p(1<=p<=length)位置上的元素

int getElem(Sqlist L,int p,int &e){    if(p<1||p>L.length){        return 0;    }    e=L.data[p];    return 1;}
0 0
原创粉丝点击