[BS]线性表-顺序表基本操作

线性表分为顺序表和链表。

顺序表的基本操作如下:

#include <stdio.h>
#include <stdlib.h>

/*---------------------------------------------*/
#define INIT_VOLUME_OF_LIST 100
#define INCRESE_VOLUME 10
/*---------------------------------------------*/
typedef char ElemType;

typedef struct
{
    ElemType* elem;
    int iCurrentVolume;
    int iCurrentLength;
    int iIncreseVolume;
}SqList;
/*---------------------------------------------*/
void ErrorMsg(char *s);
void testSq(SqList L);
void SqListInit(SqList* L);
int SqLocateElem(SqList L,ElemType e);
void SqInsertElem(SqList* L,int i,ElemType e);
/*---------------------------------------------*/
void ErrorMsg(char *s)
{
    printf("%s",s);
}
/*---------------------------------------------*/
void testSq(SqList L)
{
    int i=0;
    printf("%d %d %d %d \n",L.elem,L.iCurrentLength,L.iCurrentVolume,L.iIncreseVolume);
    if(L.iCurrentLength != 0)
        while(i<=L.iCurrentLength-1)
            printf("L.elem[%d] = '%c'\n",i-1,L.elem[i++]);
}
/*---------------------------------------------*/
void SqListInit(SqList* L)
{
    L->elem = (ElemType* )malloc(sizeof(ElemType)*L->iCurrentVolume);
    if( !(L->elem) )
    {
        ErrorMsg("Malloc failed!");
        exit(1);
    }

    L->iCurrentLength = 0;
    L->iCurrentVolume = INIT_VOLUME_OF_LIST;
    L->iIncreseVolume = INCRESE_VOLUME;
}
/*---------------------------------------------*/
void SqInputInitData(SqList* L,int n)
{
    ElemType c='a';
    int i = 1;
    if(n>L->iCurrentVolume)
    {
        ErrorMsg("Out of Volume,please expand Volume!");
        exit(1);
    }
    while(n--)
    {
        SqInsertElem(L,i,c);
        i++;
        c += 1;
    }

}
/*---------------------------------------------*/
int SqLocateElem(SqList L,ElemType e)
{
    int iSequenceNum=0;
    ElemType* p = NULL;
    p = L.elem;
    while(iSequenceNum<=L.iCurrentLength && *p!=e)
    {
        iSequenceNum++;
        p++;
    }
    if(iSequenceNum<=L.iCurrentLength)
        return iSequenceNum;
    return 0;
}
/*---------------------------------------------*/
void SqInsertElem(SqList* L,int i,ElemType e)
{
    //insert e before i
    ElemType* p=NULL;
    ElemType* q=NULL;
    if(i<1 || i>L->iCurrentLength+1)
    {
        ErrorMsg("i is out of range!");
        exit(1);
    }

    p = &(L->elem[i-1]);
    for(q=p;q>&(L->elem[L->iCurrentLength-1]);q--)
        *(p+1) = *p;
    *p = e;
    L->iCurrentLength++;
}
/*---------------------------------------------*/
int main()
{
    SqList La;
    SqListInit(&La);
    SqInputInitData(&La,26);
    testSq(La);
    return 0;
}
/*---------------------------------------------*/

void ErrorMsg(char *s);/*错误输出函数*/

void testSq(SqList L);/*对线性表是否成功初始化做简单测试*/

void SqListInit(SqList* L);/*初始化线性表为空表*/

int SqLocateElem(SqList L,ElemType e);/*定位顺序表元素*/

void SqInsertElem(SqList* L,int i,ElemType e);/*在i之前插入一个元素*/

void SqInputInitData(SqList* L,int n);/*初始化线性表数据*/

时间: 2024-10-15 11:21:54

[BS]线性表-顺序表基本操作的相关文章

线性表&gt;&gt;顺序表---&gt;逆置所有元素

1 /*顺序表中所有的元素逆置 2 * 3 */ 4 #include <iostream.h> 5 using namespace std; 6 7 int main(){ 8 void reverse_arr(int arr[],int n); 9 int a[]={0,1,2,3,4,5,6,7}; 10 int n=7; 11 reverse_arr(a,n); 12 for(int i=0;i<=n;i++){ 13 cout << a[i] << &q

java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能

package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺

C++数据结构与算法_2_线性表 --顺序表的应用示例

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

C++数据结构与算法_1_线性表 --顺序表的实现与分析

顺序表的实现与分析 引 --线性表的抽象基类: template <typename T> class LinearList { public: LinearList(); ~LinearList(); virtual int Size() const = 0; //返回线性表所能够存储的最大长度 virtual int Length() const = 0; //当前线性表的长度 virtual int Search(T &x) const = 0; virtual int Loca

线性表——顺序表与单链表学习小结

线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储. 顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据

线性表—顺序表

引言(重点): 1.线性表的概述 2.线性表的抽象数据类型描述 3.线性表的实现方式 4.线性表的具体实现 5.每种具体实现的分析 1.什么是线性表?线性表(Linear List):由同类型元素构成有序序列的线性结构. 特征:1.表中元素个数称为线性表的长度2.线性表没有元素时,称为空表3.表起始位置称表头,表结束位置称为表尾4.在一个元素的前面的元素叫前驱元素,在一个元素后面的元素叫后继元素. 2.线性表的抽象数据类型描述 List MakeEmpty():初始化一个空线性表L;Elemen

JAVA实现具有迭代器的线性表(顺序表)

1,先了解下JAVA类库中的迭代器:JAVA提供了两种基本类型的迭代器,分别用两个接口来表示:Iterator<T>,ListIterator<T>.其中,Iterator<T>接口中只定义了三个方法:hasNext().iterator().next(),而ListIterator<T>中,除了拥有前面所述的三种方法外,而另外拥有hasPrevious().previous().remove().set()等其他方法(具体参考JDK文档). 这说明:实现了

数据结构(一)线性表——顺序表

一.顺序表基本操作的实现 通常把顺序存储结构实现的线性表称为顺序表. 1.状态类型Status的定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char ElemType; 2.顺序表类型SqList的定义 #define ListSpaceIncr 20 typedef stru

数据结构和算法学习总结03 线性表---顺序表

线性表是最简单.也是最基本的一种线性数据结构. 它有两种存储表示法:顺序表和链表,最基本的操作是插入.删除和查找等. 顺序表的基本操作如下: #include <stdio.h> #include <stdlib.h> #define EXIST 1 //存在数据元素,不为空 #define EMPTY 0 //为空 #define OK 1 //成功 #define ERROR 0 //出现错误 #define OVERFLOW -1 //元素溢出 const int LIST_