#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef struct seqlist {
int *data;
int data_len; //相当于数组下标, 最后一位
int size; //记录顺序表分配的存储容量
}seqlist_t;
seqlist_t *create_seqlist(int num);
int is_empty_seqlist(seqlist_t *s);
int is_full_seqlist(seqlist_t *s);
int insert_seqlist(seqlist_t *s, int x, int pos);
int del_seqlist(seqlist_t *s, int pos);
void show_seqlist(seqlist_t *s);
#endif
#include "seqlist.h"
#include <unistd.h>
seqlist_t *create_seqlist(int num)
{
seqlist_t *s = (seqlist_t *)malloc(sizeof(seqlist_t));
s->data = (int *)malloc(sizeof(int) * num);
s->data_len = -1;
s->size = num;
return s;
}
int is_empty_seqlist(seqlist_t *s)
{
return s->data_len == -1;
}
int is_full_seqlist(seqlist_t *s)
{
return s->data_len == (s->size - 1);
}
int insert_seqlist(seqlist_t *s, int x, int pos)
{
if (is_full_seqlist(s))
{
puts("s is full \n");
return -1;
}
int ret = (s != NULL) && (pos >= 0) && (s->size > pos);
int i = 0;
if (ret)
{
if (pos >= s->data_len)
{
s->data[s->data_len + 1] = x;
}
else
{
for(i = s->data_len; i >= pos; i--)
s->data[i + 1] = s->data[i];
s->data[pos - 1] = x;
}
s->data_len++;
}
printf("insert_seqlist : s->data_len :%d \n", s->data_len);
return ret;
}
int del_seqlist(seqlist_t *s, int pos)
{
if (is_empty_seqlist(s))
{
puts("s is empty \n");
return -1;
}
int ret = (s != NULL) && (pos >= 0) && (s->size > pos);
int tmp_data = 0;
int i = 0;
if (ret)
{
if (pos > (s->data_len))
{
puts(" pos > s->data_len \n");
return -1;
}
tmp_data = s->data[pos - 1];
for(i = pos - 1; i <= s->data_len; i++)
s->data[i] = s->data[i + 1];
s->data_len--;
}
return tmp_data;
}
void show_seqlist(seqlist_t *s)
{
if (is_empty_seqlist(s))
{
puts("s is empty \n");
}
int i = 0;
while(s)
{
printf("%d \n", s->data[i++]);
if (i > s->data_len)
break;
}
putchar(10);
}
void show_structure(seqlist_t *s)
{
printf("s->data_len = %d \n", s->data_len);
printf("s->size = %d \n", s->size);
}
int main(int argc, const char *argv[])
{
int i = 0;
int num = 10;
seqlist_t *s = create_seqlist(num);
for (i = 0; i < 5; i++)
insert_seqlist(s, i, i);
show_seqlist(s);
show_structure(s);
insert_seqlist(s, 11, 7);
show_seqlist(s);
show_structure(s);
insert_seqlist(s, 16, 3);
show_seqlist(s);
show_structure(s);
del_seqlist(s, 3);
show_seqlist(s);
show_structure(s);
del_seqlist(s, 9);
show_seqlist(s);
show_structure(s);
return 0;
}