顺序表操作
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[N];
int pos;
}list;
//创建顺序表
list* create_list(void)
{
//申请空间
list *st=(list*)malloc(sizeof(list));
if(NULL == st)
{
printf("顺序表创建失败\n");
return NULL;
}
//初始化pos
st->pos=0;
return st;
}
//插入
int inster_list(list* st,int num)
{
//先判断顺序表是否为满
if(st->pos==N)
{
printf("顺序表已满\n");
return -1;
}
//在data[pos]位置插入数据
st->data[st->pos]=num;
//pos++更新
st->pos++;
return st->pos;
}
//查看
void show_list(list* st)
{
for(int i = 0;i<st->pos;i++)
{
printf("%d\n",st->data[i]);
}
}
//删除
int del_list(list* st)
{
//判断顺序表是否为空
if(st->pos==0)
{
printf("顺序表为空,无法删除\n");
return -1;
}
//更新pos
st->pos--;
return st->data[st->pos];
}
//指定位置插入数据
void insterByindex(list* st,int index,int num)
{
//判断顺序表是否为满
if(st->pos == N)
{
printf("顺序表已满,插入失败\n");
return;
}
//判断插入位置是否合法
if(index<0 || index>st->pos)
{
printf("index=%d插入位置非法",index);
return;
}
//移动数据
for(int i=st->pos-1;i>=index;i--)
{
st->data[i+1]=st->data[i];
}
//将数据插入到data下标index的位置
st->data[index]=num;
//更新pos
st->pos++;
}
//从制定位置删除数据
void delByindex(list* st,int index)
{
//判断顺序表是否为空
if(st->pos == 0)
{
printf("顺序表为空,无法删除");
return;
}
//判断删除位置是否合法
if(index<0 || index>=st->pos)
{
printf("index=%d删除位置不合法",index);
return;
}
//将下标index后面的数据循环前移1个位置
for(int i = index;i<=st->pos-2;i++)
{
st->data[i]=st->data[i+1];
}
//更新pos
st->pos--;
}
//去重
void del_repeat(list* st)
{
//判断顺序表是否为空
if(st->pos == 0)
{
printf("顺序表为空,无法删除\n");
return;
}
//找到要删除的下标位置
for(int i = 0;i<st->pos-1;i++)
{
for(int j = i+1;j<st->pos;j++)
{
//按照下标删除数据
if(st->data[i]==st->data[j])
{
delByindex(st,j);
//删除的原理是将j后面的数据往前移动一个位置
//若此时做j++会导致刚刚前移的数据比较不到,所以j先--,再j++
//将j的位置重新比较一次
j--;
}
}
}
}
int main(int argc, const char *argv[])
{
list* st;
st = create_list();
// printf("%p\n",st);
inster_list(st,1);
// printf("%p\n",st);
inster_list(st,1);
inster_list(st,2);
inster_list(st,2);
inster_list(st,3);
inster_list(st,4);
inster_list(st,5);
inster_list(st,4);
inster_list(st,6);
inster_list(st,8);
del_repeat(st);
// show_list(st);
// int pos;
// pos = del_list(st); //从尾部删除数据
// printf("%d\n",pos);
// insterByindex(st,1,50); //按指定位置插入数据
// delByindex(st,1); //按指定位置删除数据
show_list(st);
return 0;
}