一、思维导图
![](https://img-blog.csdnimg.cn/direct/c7f92b2d918a4464a9b104aca1659da8.png)
二、顺序表相关功能代码
主函数main.c
#include "head.h"
int main(int argc, const char *argv[])
{
//在堆区申请内存
sqlist *p=create();
int index;
int n;
datatype key;
printf("输入数据个数");
scanf("%d",&n);
datatype element;
for(int i=0;i<n;i++)
{
printf("输入第%d个值:",i+1);
scanf("%d",&element);
int t=insert_rear(p,element);
if(t==FALSE)
{
puts("NULL or FULL");
break;
}
}
output(p);
delete_rear(p);
output(p);
//按下表查找
printf("输入查找参数的下表:");
scanf("%d",&index);
sreach_index(p,index);
//按下表修改
printf("输入修改参数的下表:");
scanf("%d",&index);
printf("输入修改的值:");
scanf("%d",&element);
change_index(p,element,index);
output(p);
//按下表插入
printf("输入插入参数的下表:");
scanf("%d",&index);
printf("输入插入的值:");
scanf("%d",&element);
inset_index(p,element,index);
output(p);
//按下表删除
printf("输入删除参数的下表:");
scanf("%d",&index);
delete_index(p,index);
output(p);
//按元素查找
printf("输入查找元素");
scanf("%d",&key);
int keyi=sreach_key(p,key);
printf("元素的下表是:%d\n",keyi);
//去重
rmsame(p);
output(p);
//按照元素修改
printf("输入修改元素");
scanf("%d",&key);
printf("输入修改的值:");
scanf("%d",&element);
change_key(p,key,element);
output(p);
//按照元素删除
printf("输入删除元素");
scanf("%d",&key);
delete_key(p,key);
output(p);
//排序
Bubble(p);
output(p);
p=free_speace(p);
return 0;
}
自定义文件test.c
#include "head.h"
/*
* function: 创建堆区内存
* @param [ in]
* @param [out]
* @return
*/
sqlist *create()
{
sqlist *p=(sqlist*)malloc(sizeof(sqlist));
if(NULL==p)
return NULL;
memset(p->data,0,sizeof(p->data));
p->len=0;//顺序表长度清0
return p;
}
/*
* function: 判空
* @param [ in]
* @param [out]
* @return
*/
int empty(sqlist *p)
{
if(p->len==0)
return FALSE;
else
return SUCCESS;
}
/*
* function: 判满
* @param [ in]
* @param [out]
* @return
*/
int full(sqlist *p)
{
if(p->len==MAXSIZE)
return FALSE;
else
return SUCCESS;
}
/*
* function: 尾插
* @param [ in]
* @param [out]
* @return
*/
int insert_rear(sqlist *p,datatype element)
{
if(NULL==p || full(p))
return FALSE;
p->data[p->len++]=element;
return SUCCESS;
}
/*
* function: 遍历
* @param [ in]
* @param [out]
* @return
*/
int output(sqlist *p)
{
if(NULL==p || empty(p))
return FALSE;
for(int i=0;i<p->len;i++)
{
printf("%-5d",p->data[i]);
}
puts("");
}
/*
* function: 尾删
* @param [ in]
* @param [out]
* @return
*/
int delete_rear(sqlist *p)
{
if(NULL==p || empty(p))
return FALSE;
p->len--;
return SUCCESS;
}
/*
* function: 按照下表查找
* @param [ in]
* @param [out]
* @return
*/
int sreach_index(sqlist *p,int index)
{
if(p==NULL||empty(p)||index<0||index>=p->len)
{
puts("ERROR");
return FALSE;
}
printf("根据下表查找的值为:%d\n",p->data[index]);
}
/*
* function: 按照下表修改
* @param [ in]
* @param [out]
* @return
*/
void change_index(sqlist *p,datatype element,int index)
{
if(p==NULL||empty(p)||index<0||index>=p->len)
{
puts("ERROR");
return;
}
p->data[index]=element;
}
/*
* function: 按照下表插入
* @param [ in]
* @param [out]
* @return
*/
void inset_index(sqlist *p,datatype element,int index)
{
if(p==NULL||full(p)||index<0||index>p->len)
{
puts("ERROR");
return;
}
for(int i=p->len-1;i>=index;i--)
{
p->data[i+1]=p->data[i];
}
p->data[index]=element;
p->len++;
}
/*
* function: 按照下表删除
* @param [ in]
* @param [out]
* @return
*/
void delete_index(sqlist *p,int index)
{
if(p==NULL||empty(p)||index<0||index>=p->len)
return;
for(int i=index;i<p->len;i++)
{
p->data[i]=p->data[i+1];
}
p->len--;
}
/*
* function: 按照元素查找
* @param [ in]
* @param [out]
* @return
*/
int sreach_key(sqlist *p,datatype key)
{
if(p==NULL||empty(p))
return FALSE;
int keyi=-1;
for(int i=0;i<p->len;i++)
{
if(p->data[i]==key)
{
keyi=i;
}
}
return keyi;
}
/*
* function: 去重
* @param [ in]
* @param [out]
* @return
*/
void rmsame(sqlist *p)
{
if(p==NULL)
return;
for(int i=0;i<p->len-1;i++)
{
for(int j=i+1;j<p->len;j++)
{
if(p->data[i]==p->data[j])
{
delete_index(p,j);
j--;
}
}
}
}
/*
* function: 按照元素修改
* @param [ in]
* @param [out]
* @return
*/
void change_key(sqlist *p,datatype key,datatype element)
{
int index=sreach_key(p,key);
change_index(p,element,index);
}
/*
* function: 按照元素删除
* @param [ in]
* @param [out]
* @return
*/
void delete_key(sqlist *p,datatype key)
{
int index=sreach_key(p,key);
delete_index(p,index);
}
/*
* function: 排序
* @param [ in]
* @param [out]
* @return
*/
void Bubble(sqlist *p)
{
if(p==NULL||empty(p))
return;
for(int i=1;i<p->len;i++)
{
for(int j=0;j<p->len-i;j++)
{
if(p->data[j]>p->data[j+1])
{
datatype t=p->data[j];
p->data[j]=p->data[j+1];
p->data[j+1]=t;
}
}
}
}
/*
* function: 释放内存
* @param [ in]
* @param [out]
* @return
*/
sqlist *free_speace(sqlist *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
头文件head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//枚举,防止魔鬼数字
enum
{
FALSE=-1,
SUCCESS
};
#define MAXSIZE 7
typedef int datatype;
//定义顺序表
typedef struct Sqlist
{
datatype data[MAXSIZE];
datatype len;
}sqlist;
int full(sqlist *p);
sqlist *create();
int insert_rear(sqlist *p,datatype element);
int output(sqlist *p);
int delete_rear(sqlist *p);
int sreach_index(sqlist *p,int index);
void change_index(sqlist *p,datatype element,int index);
void inset_index(sqlist *p,datatype element,int index);
void delete_index(sqlist *p,int index);
int sreach_key(sqlist *p,datatype key);
void rmsame(sqlist *p);
sqlist *free_speace(sqlist *p);
void change_key(sqlist *p,datatype key,datatype element);
void delete_key(sqlist *p,datatype key);
void Bubble(sqlist *p);
#endif
三、练习
1、顺序表按元素删除
![](https://img-blog.csdnimg.cn/direct/94c4e90fcdc64acfb514f95c6600fa44.png)
2、按元素修改
![](https://img-blog.csdnimg.cn/direct/2f44af2596a74014adc9b30098703106.png)
3、排序
![](https://img-blog.csdnimg.cn/direct/5c5d879e7a72404e933cd548102634fc.png)