线性表的顺序存储——顺序表

Description

实现一个顺序线性表的初始化、插入、删除、访问、清空等操作,调用这些操作,实现如下功能:

I a b,在顺序表的第a位置插入元素b;

D a,删除顺序表中位序为a的元数,并输出该元素值;

G a,输出顺序表中位序为a的元数值;

L a,输出顺序表中元素值为a的第一个位置;

C,清空顺序表中的所有元数;

顺序表的定义如下:

  typedef int ElemType; 
  typedef struct    {

           ElemType *elem;

           int length;

           int listsize;

   } Sqlist;

Input

第一行有两个整数n,m分别表示初始线性表的长度和操作的个数,下面有m行,每一行都是上面5个操作中的一个。

Output

输出操作要求的输出。

Sample Input

5 6
1 2 3 4 5
D 3
D 1
G 1
G 2
G 3
L 4
Sample Output

3
1
2
4
5
2
就是手写一个vector,我也不知道为什么我要去写这玩意,反正写了就存下来吧

#include
#include
#define sta 100
#define add 10
#define OVERFLOW -2
#define INFEASIBLE -1
typedef struct {
    int *vec;
    int len;
    int siz;
}List;
void init(List &l)
{
    l.vec=(int *)malloc(sta*sizeof(int));
    if(!l.vec)
        exit(OVERFLOW);
    l.len=0;
    l.siz=sta;
}
void update(List &l,int val)
{
    int *newbase;
    if(l.len>=l.siz)
    {
        newbase=(int *)realloc(l.vec,(l.siz+add)*sizeof(int));
        if(!newbase)
            return ;
        l.vec=newbase;
        l.siz+=add;
    }
    l.vec[l.len]=val;
    ++l.len;
}
void insert(List &l,int pos,int val)
{
    if(pos<1||pos>l.len+1)
        return ;
    int *newbase;
    if(l.len>=l.siz)
    {
        newbase=(int *)realloc(l.vec,(l.siz+add)*sizeof(int));
        if(!newbase)
            return ;
        l.vec=newbase;
        l.siz+=add;
    }
    int *fin;
    fin=&(l.vec[pos-1]);
    for(int *i=&(l.vec[l.len-1]);i>=fin;i--)
        *(i+1)=*i;
    *fin=val;
    ++l.len;
}
int judge(int a,int b)
{
    if(a==b)
        return 1;
    return 0;
}
int del(List &l,int pos)
{
    if(pos<1||pos>l.len)
        return -1;
    int *s,*fin,ans;
    s=&(l.vec[pos-1]);
    ans=*s;
    fin=&(l.vec[l.len-1]);
    for(;s

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