文章目录
一、思维导图
二、实现顺序表的功能代码
head.h
c
复制代码
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//数组的最大长度
#define MAXSIZE 5
enum type
{
FALUSE=-1,//用于失败返回的
SUCCESS//用于成功返回的
};
//给数据元素的类型起别名
typedef int datatype;
//定义顺序表的结构体
//
typedef struct sqlist
{
//数据元素
datatype data[MAXSIZE];
//顺序表长度:实际的元素个数
int len;
}*sqlist;
//创建顺序表
sqlist create_sqlist();
//尾部插入
int insert_rear(sqlist list,datatype element);
//循环输出
int output(sqlist list);
//尾删
int delate_rear(sqlist list);
//按下标查找
int search_index(sqlist list,datatype index);
//按下标删除
int delate_index(sqlist list,datatype index);
//按下标修改
int change_index(sqlist list,int index,int element);
//按下标插入
int insert_index(sqlist list,int index,int element);
//去重
int de_weight(sqlist list);
//顺序表排序
int sort(sqlist list);
//按元素查找
int search_yuansu(sqlist list,int number);
//按元素删除
int delate_yuansu(sqlist list,int number);
//按元素修改
int change_yuansu(sqlist list,int number,int element);
#endif
test.c
c
复制代码
#include "head.h"
//顺序表内存申请
sqlist create_sqlist()
{
sqlist list=(sqlist)malloc(sizeof(struct sqlist));
if(NULL==list)
{
return NULL;
}
//堆区内存申请成功
//对数据元素清0
bzero(list->data,sizeof(list->data));
//对顺序表长度清0
list->len=0;
//返回顺序表
return list;
}
//顺序表尾部插入
int insert_rear(sqlist list,datatype element)
{
//1.判断顺序表是否为满
//2.判断顺序表是否为NULL
if(NULL==list||list->len==MAXSIZE)
{
printf("sqlist full..\n");
return FALUSE;
}
//3.在顺序表尾部插入
list->data[list->len]=element;
list->len++;
return SUCCESS;
}
//循环打印顺序表
int output(sqlist list)
{
//1.判断顺序表是否为空
//2.判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("output error...\n");
return FALUSE;
}
//循环输出
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->data[i]);
}
putchar(10);
}
//尾删
int delate_rear(sqlist list)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("delate_rear error..\n");
return FALUSE;
}
//删除
list->len--;
return SUCCESS;
}
//按下标查找
int search_index(sqlist list,datatype index)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0||index<0||index>=list->len)
{
printf("search_index error...\n");
return FALUSE;
}
//输出查找的值
printf("%d\n",list->data[index]);
return SUCCESS;
}
//按下标删除
int delate_index(sqlist list,datatype index)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
//判断是否在顺序表空间内
if(list==NULL||list->len==0||index<0||index>=list->len)
{
printf("delate_index error...\n");
return FALUSE;
}
for(int i=index;i<list->len;i++)
{
list->data[i]=list->data[i+1];
}
list->len--;
return SUCCESS;
}
//按下标修改
int change_index(sqlist list,int index,int element)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
//判断是否在顺序表空间内
if(list==NULL||list->len==0||index<0||index>=list->len)
{
printf("change_index error...\n");
return FALUSE;
}
list->data[index]=element;
return SUCCESS;
}
//按下标插入
int insert_index(sqlist list,int index,int element)
{
//判断顺序表是否为NULL
//判断是否在顺序表空间内
if(list==NULL||index<0||index>list->len)
{
printf("insert_index error...\n");
return FALUSE;
}
if(list->len==MAXSIZE)
{
printf("内存已满无法插入\n");
return FALUSE;
}
list->len++;
for(int i=list->len;i>index;i--)
{
list->data[i-1]=list->data[i-2];
}
list->data[index]=element;
return SUCCESS;
}
//去重
int de_weight(sqlist list)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("de_weight error..\n");
return FALUSE;
}
for(int i=0;i<list->len;i++)
{
for(int j=i+1;j<list->len;j++)
{
if(list->data[i]==list->data[j])
{
delate_index(list,j);
j--;
}
}
}
return SUCCESS;
}
//顺序表排序
int sort(sqlist list)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("sort error..\n");
return FALUSE;
}
for(int i=0;i<list->len-1;i++)
{
for(int j=0;j<list->len-i-1;j++)
{
if(list->data[j]>list->data[j+1])
{
int temp=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=temp;
}
}
}
return SUCCESS;
}
//按元素查找
int search_yuansu(sqlist list,int number)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("sort error..\n");
return FALUSE;
}
for(int index=0;index<list->len;index++)
{
if(list->data[index]==number)
{
return index;
}
}
return FALUSE;
}
//按元素删除
int delate_yuansu(sqlist list,int number)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("delate_yuansu error..\n");
return FALUSE;
}
int index=search_yuansu(list,number);
delate_index(list,index);
return SUCCESS;
}
//按元素修改
int change_yuansu(sqlist list,int number,int element)
{
//判断顺序表是否为空
//判断顺序表是否为NULL
if(list==NULL||list->len==0)
{
printf("change_yuansu error..\n");
return FALUSE;
}
int index=search_yuansu(list,number);
change_index(list,index,element);
return SUCCESS;
}
main.c
c
复制代码
#include "head.h"
int main(int argc, const char *argv[])
{
//1.定义一个顺序表
sqlist list=create_sqlist();
datatype element;
//2.顺序表尾部插入
for(int i=0;i<MAXSIZE;i++)
{
printf("请输入一个值:");
scanf("%d",&element);
insert_rear(list,element);
}
//3.循环打印顺序表
output(list);
//4.尾部删除
delate_rear(list);
delate_rear(list);
printf("尾删之后;");
output(list);
//5.按下标查找
int index;
printf("输入要查找的下标的值:");
scanf("%d",&index);
search_index(list,index);
//6.按下标修改
printf("输入要修改的下标:");
scanf("%d",&index);
printf("输入要改成的值:");
scanf("%d",&element);
change_index(list,index,element);
output(list);
//7.按下标删除
printf("输入要删除值的下标:");
scanf("%d",&index);
delate_index(list,index);
output(list);
//8.按下标插入
printf("输入要插入值的下标:");
scanf("%d",&index);
printf("输入要插入的值:");
scanf("%d",&element);
insert_index(list,index,element);
//9.去重0
de_weight(list);
printf("去重后的结果:");
output(list);
//10.顺序表排序
sort(list);
printf("顺序表排序后的结果:");
output(list);
//11.按元素查找
index=search_yuansu(list,14);
printf("元素查找的下标:");
printf("%d\n",index);
//12.按元素删除
delate_yuansu(list,14);
printf("按元素删除后的结果:");
output(list);
//13.按元素修改
change_yuansu(list,14,54);
printf("按元素修改后的结果:");
output(list);
//14.顺序表释放内存
free(list);
list=NULL;
return 0;
}