#include <stdlib.h>
#include <stdio.h>
#define LIST_INIT_SIZE 50
#define LIST_ADD_SIZE 10
#define OK 1
#define OVERFLOW -1
#define ERROR -1
#define NOTFOUND -1
typedef int elemtype;
struct seqlist{
elemtype *data;
int len;
int listsize;
};
//初始化顺序表
int init_seqlist(struct seqlist *s)
{
s->data = (elemtype*)malloc(sizeof(elemtype)*LIST_INIT_SIZE);
if (NULL == s->data)
return OVERFLOW;
s->len = 0;
s->listsize = LIST_INIT_SIZE;
return OK;
}
//插入
int insert_seqlist(struct seqlist *s, int i, elemtype e)
{
elemtype *newbase, *p, *q;
if (i < 1 || i > s->len + 1)
return ERROR;
if (s->len >= s->listsize){
newbase = (elemtype*)realloc(s->data, sizeof(elemtype)*(s->listsize + LIST_ADD_SIZE));
if (NULL == newbase)
return OVERFLOW;
s->data = newbase;
s->listsize += LIST_ADD_SIZE;
}
q = &s->data[i - 1];
for (p = &s->data[s->len - 1]; p >= q; --p)
*(p+1) = *p;
*q = e;
++s->len;
return OK;
}
//删除
int delete_seqlist(struct seqlist *s, int i, elemtype *e)
{
*e = s->data[i - 1];
if (i < 1 || i > s->len)
return ERROR;
for (int j = i - 1; j < s->len - 1; j++)
s->data[j] = s->data[j + 1];
--s->len;
return OK;
}
//查找节点
int search_elem(struct seqlist *s, elemtype e)
{
int i = 0;
for (i = 0; i < s->len; i++){
if (e == s->data[i])
break;
}
if (i == s->len)
return NOTFOUND;
return i;
}
void output_list(struct seqlist *s)
{
int i;
for (i = 0; i < s->len; i++)
printf("%d ", s->data[i]);
printf("\n");
}
int main()
{
seqlist s;
init_seqlist(&s);
insert_seqlist(&s, 1, 5);
insert_seqlist(&s, 1, 10);
insert_seqlist(&s, 3, 15);
output_list(&s);
int e;
delete_seqlist(&s, 1, &e);
output_list(&s);
}