Description
实现一个顺序线性表的初始化、插入、删除、访问、清空等操作,调用这些操作,实现如下功能:
1.I a b,在顺序表的第a位置插入元素b;
2.D a,删除顺序表中位序为a的元数,并输出该元素值;
3.G a,输出顺序表中位序为a的元数值;
4.L a,输出顺序表中元素值为a的第一个位置;
5.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
#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define size 1000
typedef int elemtype;
typedef int status;
#define len 10
typedef struct
{
elemtype* elem;
int length;
int listsize;
}sqlist;
status initlist(sqlist& l)
{
l.elem = (elemtype*)malloc(sizeof(elemtype) * size);
if (!l.elem)
{
exit(overflow);
}
l.length = 0;
l.listsize = size;
return ok;
}
void clear(sqlist& l)
{
l.length = 0;
}
int locateelem(sqlist l, elemtype e)
{
int i;
for ( i = 0; i <l.length; i++)
{
if (l.elem[i]==e)
{
return i + 1;
}
}
return error;
}
int getelem(sqlist l, int i, elemtype& e)
{
if (i<1||i>l.length)
{
return error;
}
e = l.elem[i - 1];
return ok;
}
status listinsert(sqlist& l, int i, elemtype e)
{
elemtype* newbase;
if (i<1||i>l.length+1)
{
return error;
}
if (l.length>=l.listsize)
{
newbase = (elemtype*)realloc(l.elem, (l.listsize + len) * sizeof(elemtype));
if (!newbase)
{
exit(overflow);
}
l.elem = newbase;
l.listsize += len;
}
for (int j = l.length-1; j >= i-1; j--)
{
l.elem[j + 1] = l.elem[j];
}
l.elem[i - 1] = e;
l.length++;
return ok;
}
status listdelete(sqlist& l, int i, elemtype& e)
{
if (i<1||i>l.length)
{
return error;
}
if (l.length==0)
{
return error;
}
e = l.elem[i - 1];
for (int j =i-1 ; j < l.length-1; j++)
{
l.elem[j] = l.elem[j + 1];
}
l.length--;
return ok;
}
int main()
{
int n, m;
scanf("%d%d", &n, &m);
sqlist l;
if (initlist(l))
{
int k;
for (int i = 0; i < n; i++)
{
scanf("%d",&k);
listinsert(l, i + 1, k);
}
char a;
int b;
while(m--)
{
getchar();
scanf("%c%d", &a,&b);
if (a=='D')
{
elemtype e;
listdelete(l, b, e);
printf("%d\n", e);
}
if (a=='G')
{
elemtype e;
getelem(l, b, e);
printf("%d\n", e);
}
if (a=='L')
{
elemtype e;
e = b;
printf("%d\n", locateelem(l, e));
}
if (a=='I')
{
elemtype e;
scanf("%d", &e);
listinsert(l, b, e);
}
if (a=='C')
{
clear(l);
}
}
}
return 0;
}