数据结构学习笔记(一) 顺序表

一般来说,由于顺序表结点的位序从1开始,而C语言中向量的下标从0开始,若从下标为1的向量元素开始使用,使结点的位序和向量的下标一致,则处理会简单一些,下标为0的元素不用或用作其它用途。

顺序表的优缺点 顺序存储结构的线性表具有顺序存取和随机存取表中元素的优点,但是存在下列缺点: (1)插入、删除操作时需要移动大量元素,效率较低。 (2)最大表长难以估计,太大了浪费空间,太小了容易溢出。 如果在线性表中经常进行插入和删除操作,选用顺序存储结构不太合适,可以选用链式存储结构。

#include 
#include 
using namespace std;
#define maxsize 1024

//结构类型定义
typedef int datatype;
typedef struct{
    datatype data[maxsize];
    int last;
}sequenlist;
sequenlist*L;

//初始化
sequenlist*InitList()
{
    sequenlist*L=(sequenlist*)malloc(sizeof(sequenlist));
    L->last=0;
    return L;
}

//插入结点
int Insert(sequenlist*L,datatype x,int i)
{
    int j;
    if (L->last>=maxsize-1)
    {
        cout<<"full"<return 0;
    }
    else if(i<1||i>L->last+1)
    {
        cout<<"not legal"<return 0;
    }
    else
    {
        for (j=L->last;j>=i;j--)
            L->data[j+1]=L->data[j];
        L->data[i]=x;
        L->last++;
        return 1;
    }
}

//删除结点
int Delete(sequenlist*L,int i)
{
    int j;
    if (i<1||i>L->last)
    {
        cout<<"not legal"<return 0;
    }
    else
    {
        for (j=i;j<=L->last-1;j++)
            L->data[j]=L->data[j+1];
        L->last--;
        return 1;
    }
}

//按值定位
int Locate(sequenlist*L,datatype x)
{
    int i=1;
    while(i<=L->last)
    {
        if(L->data[i]!=x)
            i++;
        else
            return i;
    }
    return 0;
}

//就地逆置
int Invert(sequenlist*L)
{
    int i=1;
    datatype temp;
    while(i<=L->last/2)
    {
        temp=L->data[i];
        L->data[i]=L->data[L->last-i+1];
        L->data[L->last-i+1]=temp;
        i++;
    }
    return 1;
}

//输出顺序表
int Show(sequenlist* L)
{
    int i;
    for (i=1;i<=L->last;i++)
        cout<data[i];
    cout<return 0;
}

//测试
int main()
{
    L=InitList();
    Insert(L,1,1);
    Insert(L,2,2);
    Insert(L,3,3);
    Insert(L,4,4);
    Insert(L,3,5);
    Delete(L,1);
    Show(L);
    Invert(L);
    Show(L);
}

你可能感兴趣的:(数据结构)