#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//构造顺序表类型
#define SIZE 10
typedef int data_t; //
typedef struct list{
data_t data[SIZE]; //
int last; //
}seqlist;
//创建或申请顺序表及初始化
seqlist * create_seqlist()
{
seqlist *seq = (seqlist *)malloc(sizeof(seqlist));
if(NULL == seq) return NULL;
//初始化
memset(seq->data, 0, sizeof(seq->data)); //清空申请的空间
seq->last = -1; //表示空
return seq;
}
//判空
int seqlist_is_empty(seqlist *seq)
{
//1、判断seq
if(NULL == seq) return -1;
//2、判断空
return ((seq->last == -1)?1:0);
}
//判满
int seqlist_is_full(seqlist *seq)
{
//1、判断seq
if(NULL == seq) return -1;
//2、判断满
return ((seq->last == SIZE -1)?1:0);
}
//求表长
int get_length_seqlist(seqlist *seq)
{
//1、判断seq
if(NULL == seq) return -1;
//2、判断空
return ((seq->last + 1));
}
//按位置增加
int insert_by_pos_seqlist(seqlist *seq, int pos, data_t data )
{
//判断seq
if(NULL == seq) return -1;
//判满
if(1 == seqlist_is_full(seq)) return -1;
//判断位置合法性
int len = get_length_seqlist(seq);
if(pos < 0 || pos > len) return -1;
//给pos 挪位置
int i;
for(i=seq->last; i >= pos; i--)
{
seq->data[i+1] = seq->data[i]; //挪位置
}
//插入数据
seq->data[pos] = data; //
//last++
seq->last++;
return 0;
}
//按位置删除
int del_by_pos_seqlist(seqlist *seq, int pos )
{
//判断seq
if(NULL == seq) return -1;
//判空
if(1 == seqlist_is_empty(seq)) return -1;
//判断位置合法性
int len = get_length_seqlist(seq);
if(pos < 0 || pos > len-1) return -1; //0-len-1
//通过挪动 删除
int i;
for(i=pos; i <= seq->last; i++)
{
seq->data[i] = seq->data[i+1]; //后往前挪
}
//last--
seq->last--;
return 0;
}
//按位置查询
data_t find_by_pos_seqlist(seqlist *seq, int pos)
{
//判seq
if(NULL == seq) return -1;
//判空
if(1 == seqlist_is_empty(seq)) return -1;
return seq->data[pos];
}
//按位置修改
int change_by_pos_seqlist(seqlist* seq, int pos, data_t new_vlu)
{
//判seq
if(NULL == seq) return -1;
//判空
if(1 == seqlist_is_empty(seq)) return -1;
seq->data[pos] = new_vlu;
return 0;
}
//按值查询/修改(拓展)
int find_by_data_seqlist(seqlist *seq,data_t vlu)
{
//判空
if(1 == seqlist_is_empty(seq)) return -1;
//判断位置合法性
int len = get_length_seqlist(seq);
if(pos < 0 || pos > len-1) return -1; //0-len-1
int i;
for (i=0; i<=seq->last;i++)
{
if(vlu==seq->data[i])
return i;
}
int chang
//排序
//打印表
void show_seqlist(seqlist *seq)
{
//判断seq
if(NULL == seq) return -1;
//判断 空
if(1 == seqlist_is_empty(seq)) return -1;
//循环遍历打印
int i;
for(i=0; i<=seq->last; i++)
{
printf("%d ",seq->data[i]);
}
printf("\n");
}
//销毁表
void destory_seqlist(seqlist **p)
{
free(*p); //真正销毁表和头
}
int main(int argc,const char *argv[])
{
seqlist *seq= create_seqlist();
if(NULL == seq)
{
perror("create_seqlist error");
return -1;
}
printf("create_seqlist ok\n");
//插入 5 个
int i;
for(i=0; i< 5; i++)
{
insert_by_pos_seqlist(seq, i, i+1);
}
show_seqlist(seq);
//删除一个
int ret = del_by_pos_seqlist(seq,3);
if(-1 == ret)
{
perror("删除失败\n");
return -1;
}
show_seqlist(seq);
//查询 2 的值
data_t vlu = find_by_pos_seqlist(seq, 2);
printf("%d\n", vlu);
//修改 2 位置的只为 666
change_by_pos_seqlist(seq, 2, 666);
show_seqlist(seq);
//
return 0;
}