思维导图
头文件:
#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
enum type
{
FALUSE=-1,//用于返回失败值
SUCCESS//用于返回成功值
};
#define MAXSIZE 12
typedef int datatype;
typedef struct sqlist
{
datatype date[MAXSIZE];
int len;
}*sqlist;
sqlist create_sqlist();
int output(sqlist list);
int insert_rear(sqlist list,datatype element);
int delete_rear(sqlist list);
int search_index(int index,sqlist list);
int change_index(int index,int element,sqlist list);
int delete_index(int index,sqlist list);
int add_index(int index,int element,sqlist list);
int delete_element(datatype element,sqlist list);
int found_element(datatype element,sqlist list);
int change_element(datatype element1,datatype element2,sqlist list);
int de_rep(sqlist list);
int sort(sqlist list);
#endif
自定义文件:
#include "head.h"
sqlist create_sqlist()
{
sqlist list=(sqlist)malloc(sizeof(struct sqlist));
if(NULL==list)
{
return NULL;
}
bzero(list->date,sizeof(list->date));
//对数据元素清零
list->len=0;
//对顺序长度清零
return list;
//返回顺序表
}
int insert_rear(sqlist list,datatype element)
{
//判断顺序表是否为满或者NULL
if(NULL==list || list->len==MAXSIZE)
{
printf("sqlist full..\n");
return FALUSE;//-1
}
list->date[list->len]=element;
//在顺序表插入后元素多一个,顺序表长度自增加一
list->len++;
return SUCCESS;
}
int output(sqlist list)
{
//判断顺序表是否为NULL
//判断顺序表是否为空
if(NULL==list || list->len==0)
{
printf("sqlist empty..\n");
return FALUSE;
}
//循环输出
for(int i=0;i<list->len;i++)
{
printf("%d ",list->date[i]);
}
printf("\n");
return SUCCESS;
}
int delete_rear(sqlist list)
{
//判断顺序表是否为NULL
//判断顺序表是否为空
if(NULL==list || list->len==0)
{
printf("sqlist empty..\n");
return FALUSE;
}
//删除len-1对应的值
list->len--;
return SUCCESS;
}
int search_index(int index,sqlist list)
{
//判断顺序表是否为空,NULL,index下标是否合法
if(NULL==list || list->len==0 || index<0 || index>=list->len)
{
printf("search_index error..\n");
return FALUSE;
}
printf("search_index data is:%d\n",list->date[index]);
return SUCCESS;
}
int change_index(int index,int element,sqlist list)
{
if(NULL==list || list->len==0 || index<0 || index>=list->len)
{
printf("change_index error..\n");
return FALUSE;
}
list->date[index]=element;
printf("change_index data is:%d\n",list->date[index]);
output(list);
return SUCCESS;
}
int delete_index(int index,sqlist list)
{
if(NULL==list || list->len==0 || index<0 || index>=list->len)
{
printf("delete_index error..\n");
return FALUSE;
}
for(int i=index;i<list->len-1;i++)
{
list->date[i]=list->date[i+1];
}
list->len--;
output(list);
return SUCCESS;
}
int add_index(int index,int element,sqlist list)
{
if(NULL==list || list->len==MAXSIZE || index<0 || index>list->len)
{
printf("add_index error..\n");
return FALUSE;
}
for(int i=list->len-1;i>=index;i--)
{
list->date[i+1]=list->date[i];
}
list->date[index]=element;
list->len++;
output(list);
return SUCCESS;
}
int delete_element(datatype element,sqlist list)
{
int index=-1;
for(int i=0;i<list->len;i++)
{
if(list->date[i]==element)
{
index=i;
delete_index(index,list);
}
}
if(index==1)
{
printf("未找到删除目标元素\n");
return FALUSE;
}
return SUCCESS;
}
int found_element(datatype element,sqlist list)
{
int num=0;
for(int i=0;i<list->len;i++)
{
if(list->date[i]==element)
{
printf("list->date[%d}=%d\n",i,element);
num++;
}
}
if(num==0)
{
printf("未找到目标元素\n");
return FALUSE;
}
return SUCCESS;
}
int change_element(datatype element1,datatype element2,sqlist list)
{
int num=0;
for(int i=0;i<list->len;i++)
{
if(list->date[i]==element1)
{
list->date[i]=element2;
num++;
}
}
if(num==0)
{
printf("未找到目标元素\n");
return FALUSE;
}
output(list);
return SUCCESS;
}
int de_rep(sqlist list)
{
printf("执行去重操作:");
for(int i=0;i<list->len;i++)
{
for(int j=i+1;j<list->len;j++)
{
if(list->date[i]==list->date[j])
{
//删除j对应的值
delete_index(j,list);
j--;
}
}
}
return SUCCESS;
}
int sort(sqlist list)
{
int temp;
printf("执行顺序排序后结果为:");
for(int i=0;i<list->len-1;i++)
{
for(int j=0;j<list->len-i-1;j++)
{
if(list->date[j]>list->date[j+1])
{
temp=list->date[j];
list->date[j]=list->date[j+1];
list->date[j+1]=temp;
}
}
}
output(list);
return SUCCESS;
}
主函数文件:
#include "head.h"
int main(int argc, const char *argv[])
{
//定义一个顺序表
sqlist list= create_sqlist();
//顺序表尾部插入
datatype element;//插入的值
for(int i=0;i<MAXSIZE;i++)
{
printf("please enter element:");
scanf("%d",&element);
insert_rear(list,element);
}
//3、循环打印顺序表
output(list);
//4、尾部删除
delete_rear(list);
delete_rear(list);
printf("\ndelete_rear date is:\n");
output(list);
//5.按下标查找
int index;
printf("please enter find index:");
scanf("%d",&index);
search_index(index,list);
//6.按下标修改
printf("please enter change index:");
scanf("%d",&index);
printf("please enter change element:");
scanf("%d",&element);
change_index(index,element,list);
//7.按下标删除
printf("please enter delete index:");
scanf("%d",&index);
delete_index(index,list);
//8.按下标插入
printf("please enter add index:");
scanf("%d",&index);
printf("please enter add element:");
scanf("%d",&element);
add_index(index,element,list);
//9.按元素删除
printf("please enter delete element:");
scanf("%d",&element);
delete_element(element,list);
//10.按元素查找
printf("please enter found element:");
scanf("%d",&element);
found_element(element,list);
//11.按元素修改
int element1,element2;
printf("please enter be changed element1:");
scanf("%d",&element1);
printf("please enter change element2:");
scanf("%d",&element2);
change_element(element1,element2,list);
//12.去重
de_rep(list);
//顺序表排序
sort(list);
return 0;
}
代码运行结果