头文件:
//头文件
#ifndef __HEAD_H_
#define __HEAD_H_
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 7
typedef int datatype;
enum num
{
FALSE=-1,
SUCCESS
};
typedef struct SQLIST
{
//数据元素
datatype data[MAXSIZE];
//顺序表长度
int len;
}sqlist;
sqlist *create();
int full(sqlist *list);
int inset_rear(datatype element,sqlist *list);
int output(sqlist *list);
int delete_rear(sqlist *list);
void search_index(sqlist *list,int index);
void change_index1(sqlist *list,int index1,int element1);
void add_index2(sqlist *list,int index2,int element2);
void delete_index2(sqlist *list,int index2);
int find_index(sqlist *list,int index);
void delete_same(sqlist *list);
void update_key(sqlist *list,datatype key,datatype element);
void delete_key(sqlist *list,datatype key);
void bubble(sqlist *list);
sqlist *free_space(sqlist *list);
#endif
主函数:
//主函数
#include"head.h"
int main(int argc, const char *argv[])
{
sqlist *list=create();
int index;
int n;
datatype key;
datatype element;
printf("please enter n:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("please enter %d inster element:",i+1);
scanf("%d",&element);
int flag=inset_rear(element,list);
if(flag==FALSE)
{
puts("NULL of FULL");
break;
}
}
// printf("please enter key:");
// scanf("%d",&key);
// printf("please enter element:");
// scanf("%d",&element);
// printf("please enter index:");
// scanf("%d",&index);
/* output(list);
delete_rear(list);
delete_rear(list);
output(list);
int index;
search_index(list,index);
int index1,element1;
printf("please enter index1:");
scanf("%d",&index1);
printf("please enter element1:");
scanf("%d",&element1);
change_index1(list,index1,element1);
output(list);
int index2,element2;
printf("please enter index2:");
scanf("%d",&index2);
printf("please enter element2:");
scanf("%d",&element2);
add_index2(list,index2,element2);
output(list);
printf("please enter index2:");
scanf("%d",&index2);
delete_index2(list,index2);
output(list);
int s=find_index(list,index);
printf("s=%d\n",s);
delete_same(list);
output(list);
update_key(list,key,element);
output(list);
delete_key(list,key);
output(list);
bubble(list);
output(list);
*/
list=free_space(list);
return 0;
}
自定义文件:
//自定义文件
#include"head.h"
//获取堆区空间
sqlist *create()
{
sqlist *list=(sqlist *)malloc(sizeof(sqlist));
if(NULL==list)
return NULL;
//对数据元素清零
memset(list->data,0,sizeof(list->data));
//对数据长度清零
list->len=0;
return list;
}
//判断是否为满
int full(sqlist *list)
{
return list->len==MAXSIZE?FALSE:SUCCESS;
}
//尾插入
int inset_rear(datatype element,sqlist*list)
{
if(NULL==list || full(list))
return FALSE;
list->data[list->len++]=element;
return SUCCESS;
}
//判断空
int empty(sqlist *list)
{
return list->len==0?FALSE:SUCCESS;
}
//输出
int output(sqlist *list)
{
if (NULL==list || empty(list))
return FALSE;
for(int i=0;i<list->len;i++)
{
printf("%-5d",list->data[i]);
}
puts("");
}
int delete_rear(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
list->len--;
return SUCCESS;
}
void search_index(sqlist *list,int index)
{
if(NULL==list || empty(list) || index<0 || index>=list->len)
{ puts("ERROR");
return;
}
printf("search by index element is %d\n",list->data[index]);
}
void change_index1(sqlist *list,int index1,int element1)
{
if(NULL==list || empty(list) || index1<0 || index1 >=list->len)
{
puts("ERROR");
return;
}
list->data[index1]=element1;
}
void add_index2(sqlist *list,int index2,int element2)
{
if(NULL==list || full(list) || index2<0 || index2>list->len)
{
puts("ERROR");
return;
}
for(int i=list->len-1;i>=index2;i--)
{
list->data[i+1]=list->data[i];
}
list->data[index2]=element2;
list->len++;
}
//顺序
void delete_index2(sqlist *list,int index2)
{
if(NULL==list || empty(list) || index2<0 || index2>=list->len)
{
puts("ERROR");
return;
}
for(int i=index2+1;i<list->len;i++)
{
list->data[i-1]=list->data[i];
}
list->len--;
}
//顺序表按任意元素查找
int find_index(sqlist *list,int index)
{
int t=-1;
if(list==NULL || empty(list))
{
return FALSE;
}
for(int i=0;i<list->len;i++)
{
if(index==list->data[i])
t=i;
}
return t;
}
//顺序表去重
/*
void delete_same(sqlist *list)
{
for(int i=0;i<list->len-1;i++)
{
for(int j=i+1;j<list->len;j++)
{
if(list->data[i]==list->data[j])
{
delete_index2(list,j);
j--;
}
}
}
}
*/
//顺序表按任意元素修改
void update_key(sqlist *list,datatype key,datatype element)
{
int tem=find_index(list,key);
change_index1(list,tem,element);
}
//顺序表按任意元素删除
void delete_key(sqlist *list,datatype key)
{
int tem=find_index(list,key);
// printf("tem=%d\n",tem);
delete_index2(list,tem);
}
//顺序表排序
void bubble(sqlist *list)
{
if(list==NULL || empty(list))
{
puts("ERROR");
return;
}
for(int i=1;i<list->len;i++)
{
for(int j=0;j<list->len-i;j++)
{
if(list->data[j]>list->data[j+1])
{
datatype t=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=t;
}
}
}
}
//释放空间
sqlist *free_space(sqlist *list)
{
if(NULL==list)
return NULL;
free(list);
list=NULL;
return list;
}
1.顺序表按任意元素修改
2.顺序表按任意元素删除
3.顺序表排序