完成对数据的增删改查
头文件:包含头文件引用、宏定义、函数定义、结构体定义
#ifndef __FUNC_H_
#define __FUNC_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int dataType;
#define N 5
typedef struct{
dataType data[N];
int pos;
}Seq;
Seq* create_seq();
void insert_seq(Seq* list,dataType num,int index);
void detelt_seq(Seq* list,int index);
void tarver_seq(Seq* list);
void seq_change(Seq* list,int n,dataType num);
void seq_find(Seq* list,int n);
void seq_find(Seq* list,int n);
void seq_changeByData(Seq* list,dataType oldNum,dataType newNum);
#endif
功能函数:创建结构体空间
//创建
Seq* create_seq()
{
Seq *list=(Seq*)malloc(sizeof(Seq));
memset(list,0,sizeof(Seq));
return list;
}
功能函数:判断是否为空是否为满,删除时判断空,插入时判断满
//判断是否为空
int Seq_empty(Seq* list){
return list->pos==0?1:0;
}
//判断是否已满
int Seq_isFull(Seq* list){
return list->pos==N?1:0;
}
功能函数:插入数据(包括从尾部插入、从指定下表位置插入)
//插入
void insert_seq(Seq* list,dataType num,int index)
{
if(Seq_isFull(list)){
printf("空间已满,无法插入\n");
return;
}
if(index>list->pos || index<0){
printf("不能在此处插入\n");
return;
}
for(int i=list->pos;i>index;i--){ //从pos位置把前一个数据同步给后面的空间
list->data[i]=list->data[i-1]; //将index那个下标位置的空间空出来
}
list->data[index]=num;
list->pos++;
return;
}
功能函数:删除(包括从尾部删除、从指定下标位置删除)
//删除
void detelt_seq(Seq* list,int index)
{
if(Seq_empty(list)){
printf("无法删除,数组为空\n");
return;
}
if(list->pos<=index||index<0){
printf("不能删除顺序表以外的数据\n");
return;
}
printf("deteltData=%d\n",list->data[index]);
for(int i=index;i<list->pos-1;i++){ //从index位置将后一个覆盖到前一个的空间
list->data[i]=list->data[i+1]; //将index空间覆盖完成删除
}
list->pos--;
return;
}
功能函数:根据指定下标匹配数据进行修改
//修改
void seq_change(Seq* list,int n,dataType num)
{
if(list->pos<n||n<0){
printf("修改失败,内容不在顺序表内\n");
return;
}
list->data[n]=num;
printf("changeData=%d\n",list->data[n]);
return;
}
功能函数:根据指定下标查找对应的内容
//查询
void seq_find(Seq* list,int n)
{
if(list->pos<n||n<0){
printf("查询失败,内容不在数据表内\n");
return;
}
printf("findData=%d\n",list->data[n]);
return;
}
功能函数:遍历数据
//遍历
void tarver_seq(Seq* list)
{
for(int i=0;i<list->pos;i++){
printf("%d ",list->data[i]);
}
putchar(10);
}
功能函数:根据数据值查找对应内容
//按数据查找
void seq_findByData(Seq* list,dataType num)
{
int flag=1;
for(int i=0;i<list->pos;i++){
if(num==list->data[i]){
printf("%d下标为%d\n",num,i);
flag=0;
}
}
if(flag)
printf("未查找到%d\n",num);
return;
}
功能函数:根据数据值修改对应内容
//按数据修改
void seq_changeByData(Seq* list,dataType oldNum,dataType newNum)
{
int flag=1;
for(int i=0;i<list->pos;i++){
if(oldNum==list->data[i]){
list->data[i]=newNum;
flag=0;
}
}
if(flag)
printf("未找到%d,修改失败\n",oldNum);
return;
}
主函数代码:
#include "./03_func.h"
int main(int argc, const char *argv[])
{
//创建
Seq* list=create_seq();
//插入
insert_seq(list,100,0);
insert_seq(list,200,1);
insert_seq(list,100,1);
insert_seq(list,400,2);
//按下标查找与修改
seq_change(list,0,1000);
seq_find(list,2);
//删除
detelt_seq(list,1);
//遍历
tarver_seq(list);
//按数据查找与修改
seq_changeByData(list,400,999);
seq_findByData(list,999);
return 0;
}
删除重复数据(将先出现的数据与后面的数据对比,如果有重复的将后面的数据删除)顺序表中原有:1221134324534541
顺序表中存储:12345
思路:1、两层循环,第一层循环取数组里的每一个数
2、数组里的每一个数去跟后面的数比较
3、如果和指定的数相等就调用数组前移的函数,将那个相等的数覆盖,同时index减一
头文件
#ifndef __func_h__
#define __func__h_
#include <stdio.h>
#include <stdlib.h>
#define N 30
typedef struct{
int pos;
int arr[N];
}List;
List* create_list();
void tra_list(List* list);
void Delete_repData(List* list);
#endif
功能函数:创建结构体
//创建结构体
List* create_list()
{
List* list=(List*)malloc(sizeof(List));
return list;
}
功能函数:遍历结构体
//遍历结构体
void tra_list(List* list)
{
for(int i=0;i<list->pos;i++){
printf("%d ",list->arr[i]);
}
putchar(10);
printf("pos=%d\n",list->pos);
return;
}
功能函数:数据成片前移
//结构体数据前移
void move_listData(List* list,int num)
{
for(int i=num;i<list->pos-1;i++){
list->arr[i]=list->arr[i+1];
}
list->pos--;
return;
}
功能函数:数据去重
//结构体数组去重
void Delete_repData(List* list)
{
int i,j;
for(i=0;i<list->pos-1;i++){ //将每个数据拿出来作比较,比到pos的前一个就可以确定了,因为最后一个数没有可以比较的了
j=i+1; //将后面的一个数用来作比较
while(j<list->pos){ //直到pos-1时结束
if(list->arr[i]==list->arr[j]){ //满足条件时调用函数,while防止成片的相同数据
move_listData(list,j);
}else{ //直到对比到没有相同的才继续往后对比
j++;
}
}
}
return;
}
主函数:
#include "./03_func.h"
int main(int argc, const char *argv[])
{
List* list=create_list(); //创建结构体
int arr[16]={1,2,2,1,1,3,4,3,2,4,5,3,4,5,4,1};
for(list->pos=0;list->pos<sizeof(arr)/sizeof(arr[0]);list->pos++){
list->arr[list->pos]=arr[list->pos]; //将数组放入结构体
}
tra_list(list); //遍历数组
Delete_repData(list); //数组去重
tra_list(list); //遍历数组
return 0;
}
执行make命令,运行结果: