1.按位置操作
1)按照位置插入数据
2)按照位置删除数据
3)按照位置修改数据
4)按照位置查找数据
2.按数据操作
1)按照数据查找数据
2)按照数据修改数据
3.删除顺序表和删除重复数据
#include <stdio.h>
#include <stdlib.h>
#define N 100
//结构体
typedef struct
{
int data[N];
int pos;
}Sqe;
//创建顺序表
Sqe * create_sqtlist(void)
{
Sqe *sq = (Sqe *)malloc(sizeof(Sqe));
if(sq == NULL)
return NULL; //malloc返回地址为空,代表没有申请成功堆空间
sq -> pos = 0; //将pos初始化为0
return sq;
}
//插入数据
int insert_sqtlist(Sqe *sq,int num)
{
//判读顺序表是否为满
if(sq -> pos == N)
return 0;
//在pos位置插入数据
sq -> data[sq -> pos] = num;
//pos自增
sq -> pos++;
return 1;
}
//按指定位置插入数据
int ListInsert_SqList(Sqe *ptr,int loc,int num)
{
//判断当前存储空间是否已满
if(ptr -> pos == N)
return 0;
//判读插入位置是否合法
if(loc > ptr ->pos || loc < 0)
return 0;
//插入新元素的步骤
// 1.插入位置及之后的元素后移
// for(int i=0,j=(ptr->pos);i<ptr->pos-loc;i++,j--)
for(int i=ptr->pos;i>loc;i--)
{
// ptr ->data[j] = ptr ->data[j-1];
ptr ->data[i] = ptr ->data[i-1];
//
}
//2.将新元素放入第loc位置
ptr ->data[loc] = num;
//表长加1
ptr ->pos++;
return 1;
}
//按指定位置修改数据
int chang_SqList(Sqe *ptr,int loc,int num)
{
//判读插入位置是否合法
if(loc > ptr ->pos || loc < 0)
return 0;
//将新元素放入第loc位置
ptr ->data[loc] = num;
return 1;
}
//删除数据
int del_sqtlist(Sqe *sq)
{
//判读顺序表是否为空
if(sq ->pos == 0)
return 0;
//将pos-1位置的数据置为0
// sq -> data[sq -> pos-1] = 0;
//更新pos
sq->pos--;
return 1;
}
//按位置删除
int delloc_sqtlist(Sqe *qtr,int index)
{
//判断顺序表是否为空
if(qtr ->pos == 0)
return 0;
//判断插入位置是否合法
if(index >= qtr ->pos || index < 0)
return 0;
//将index位置后面的数据往前移动1位
for(int i=index;i<qtr ->pos-1;i++)
qtr ->data[i] = qtr ->data[i+1];
//表长减1
qtr ->pos--;
return 1;
}
//删除重复数据
int deduplicate(Sqe *qtr)
{
//判断顺序表是否为空或者只有一个数据是不用作删除
if(qtr ->pos <=1)
return 0;
for(int i=0;i<qtr ->pos-1;i++)
{
for(int j=i+1;j <qtr ->pos;)
{
if(qtr ->data[i]==qtr ->data[j])
delloc_sqtlist(qtr,j);
else
{
j++;
}
}
}
return 1;
}
//删除顺序表
void dellist_sqtlist(Sqe **qtr)
{
free(*qtr);
*qtr = NULL;
}
//遍历顺序表
void traversal_sqtlist(Sqe * sq)
{
//判断顺序表是否为空
if(sq -> pos == 0)
printf("顺序表为空");
for(int i=0;i< sq->pos;i++)
printf("%-3d",sq -> data[i]);
}
int main(int argc, const char *argv[])
{
//通过函数创建一个顺序表
Sqe *sq = create_sqtlist();
//通过函数插入数据
for(int i=0;i<10;i++)
insert_sqtlist(sq,i);
//通过函数遍历顺序表
traversal_sqtlist(sq);
putchar(10);
//通过函数删除数据
for(int i=0;i<5;i++)
del_sqtlist(sq);
//通过函数遍历顺序表
traversal_sqtlist(sq);
putchar(10);
//在指定位置插入数据
ListInsert_SqList(sq,0,1);
ListInsert_SqList(sq,1,1);
ListInsert_SqList(sq,2,1);
ListInsert_SqList(sq,3,1);
//在指定位置修改数据
chang_SqList(sq,4,1);
//通过函数遍历顺序表
traversal_sqtlist(sq);
putchar(10);
//按位置删除
delloc_sqtlist(sq,0);
//通过函数遍历顺序表
traversal_sqtlist(sq);
putchar(10);
//通过函数删除重复数据
deduplicate(sq);
//通过函数遍历顺序表
traversal_sqtlist(sq);
putchar(10);
//删除顺序表
dellist_sqtlist(&sq);
return 0;
}