線形テーブルの順序格納——順序テーブル

2282 ワード

Description
1つの順序線形テーブルの初期化、挿入、削除、アクセス、クリアなどの操作を実現し、これらの操作を呼び出し、以下の機能を実現する.
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
最初の行には2つの整数nがあり、mはそれぞれ初期線形テーブルの長さと操作の個数を表し、下にはm行があり、各行は上の5つの操作のうちの1つである.
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を1つ書いて、私もどうして私がこれを書くのか分かりません.どうせ書いたら貯金しましょう.
#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