1. 完成白天课上的代码(顺序表的增删查改),并编写makefile进行编译。上交
2. 顺序表去重
代码:
01_sequence.c
#include <stdio.h>
#include <stdlib.h>
#include "./01_func.h"
//创建顺序表
SeqList* create_seqList()
{
//让list指向顺序表
SeqList* list = (SeqList*)malloc(sizeof(SeqList));
//判断堆空间是否创建成功
if(NULL == list)
{
return NULL;
}
list->pos = 0;
return list;
}
//增加
void add_seqList(SeqList* list,datatype num)
{
//判断顺序表是否为空
if(list->pos >= N)
{
printf("顺序表为满,插入失败\n");
return;
}
//在pos位置插入数据
list->data[list->pos] = num;
//将pos++
(list->pos)++;
printf("插入成功!\n");
return;
}
//遍历
void iterate_seqList(SeqList* list)
{
if(list->pos == 0)
{
printf("顺序表为空,遍历失败!\n");
return;
}
for(int i=0;i<list->pos;i++)
{
printf("遍历结果为:%d\n",list->data[i]);
}
}
/*
//查找表
void select_seqList(SeqList* list)
{
//判空
int n;
if(list->pos == 0)
{
printf("顺序表为空,遍历失败!\n");
return;
}
printf("请输入想要查找的整数():\n");
scanf("%d",&n);
for(list->pos=0;list->pos<=3;list->pos++)
{
if(n == list->data[list->pos])
{
printf("找到了%d,是数组第%d位整数\n",n,list->pos);
}
}
}
//删除表元素
datatype delet_seqList(SeqList *list)
{
if(list->pos == 0)
{
printf("顺序表为空,遍历失败!\n");
return 0;
}
list->pos--;
num1 = list->data[list->pos];
iterate_seqList(list);
return num1;
}
*/
//任意删除以为数组元素
void delete_seqList1(SeqList* list,datatype n)
{
if(list->pos == 0)
{
printf("顺序表为空,遍历失败!\n");
return;
}
if(n<0 && n>=list->pos)
{
printf("输入不合法!\n");
}
for(int i=n;i<list->pos-1;i++)
{
list->data[i] = list->data[i+1];
printf("删除成功,删除元素位置为:%d,值为%d!\n",i,list->data[i]);
}
list->pos--;
//遍历数组函数
// iterate_seqList(list);
return;
}
/*
//输入一个位置插入数据
void insert_seqList(SeqList* list)
{
int index,i,n;
printf("请输入要插入的数组下标:\n");
scanf("%d",&index);
for(i=list->pos;i>index;i--)
{
list->data[i] = list->data[i-1];
}
printf("请输入要插入的数据:\n");
scanf("%d",&n);
list->data[index] = n;
list->pos++;
iterate_seqList(list);
return;
}
//修改数组元素值,按下标修改
void update_seqList(SeqList* list)
{
int i,j;
printf("请输入想修改的元素下标:\n");
scanf("%d",&j);
for(i=0;i<list->pos;i++)
{
if(i==j)
{
printf("请输入要修改的元素值:\n");
scanf("%d",&list->data[j]);
}
}
iterate_seqList(list);
}
*/
//根据数据查找位置
void select_seqList_date(SeqList* list)
{
datatype num3;
printf("请输入要查找的元素值:\n");
scanf("%d",&num3);
for(i=0;i<list->pos;i++)
{
if(list->data[i]==num3)
{
printf("该元素是第%d位的%d\n",i,data[i]);
}
}
}
//根据数据修改元素值
void update_seqList_data(SeqList* list)
{
datatype num1,num2;
printf("请输入要修改的元素值和准备更新的值:\n");
scanf("%d %d",&num1,&num2);
for(i=0;i<list->pos;i++)
{
if(list->data[i] == num1)
{
list->data[i] = num2;
}
}
iterate_seqList(list);
}
//删除重复元素,各元素仅保留一份
void del_seqList(SeqList* list)
{
int i,j;
for(i=0;i<list->pos;i++)
{
int num2 = list->data[i];
for(j=i+1;j<list->pos;j++)
{
if(list->data[j] == num2)
{
delete_seqList1(list,j);
j--;
}
}
}
iterate_seqList(list);
}
01_main.c
#include <stdio.h>
#include "./01_func.h"
datatype main(int argc, const char *argv[])
{
//创建一个顺序表
SeqList * list = create_seqList();
//从尾部插入数据
add_seqList(list,1);
add_seqList(list,2);
add_seqList(list,2);
add_seqList(list,1);
add_seqList(list,1);
add_seqList(list,3);
add_seqList(list,4);
add_seqList(list,3);
add_seqList(list,2);
add_seqList(list,4);
add_seqList(list,5);
add_seqList(list,3);
add_seqList(list,4);
add_seqList(list,5);
add_seqList(list,4);
add_seqList(list,1);
//遍历顺序表
iterate_seqList(list);
/*
select_seqList(list);
printf("取到的数据为:%d\n",delet_seqList(list));
//任意删除以为数组元素
printf("请输入要删除的元素位置下标:\n");
datatype n;
scanf("%d",&n);
delete_seqList1(list,n);
insert_seqList(list);
//修改数组元素值,按下标修改
update_seqList(list);
*/
//删除重复元素
del_seqList(list);
return 0;
}
01_func.h
#ifndef __FUNC_H__
#define __FUNC_H__
#define N 16 //顺序表的容量
//重命名变量类型,在现实中可能不是int类型,方便转换类型
typedef int datatype;
typedef struct
{
datatype data[N]; //顺序表
datatype pos; //下标
}SeqList;
datatype num1;
SeqList* create_seqList();
void add_seqList(SeqList* list,datatype num);
void iterate_seqList(SeqList* list);
//查找表
void select_seqList(SeqList* list);
datatype delet_seqList(SeqList *list);
void delete_seqList1(SeqList* list,datatype n);
void insert_seqList(SeqList* list);
//修改数组元素值,按下标修改
void update_seqList(SeqList* list);
//删除重复元素
void del_seqList(SeqList* list);
#endif
01.cfg
Obj:=01_main.o 01_sequence.o
Target:= a.out
CC:=gcc
CAN:=-c -o
makefile1
-include ./01.cfg
$(Target):$(Obj)
$(CC) $^ -o $@
%.o:%.c
$(CC) $< $(CAN) $@
.PHONY:clean
clean:
rm$(obj) $(Target)