Day2
顺序表操作
head.c
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int datatype;//int类型重定义
//结构体重定义
typedef struct list
{
datatype data[MAXSIZE];
int len;
}sqlist;
//枚举
enum A
{
FALSE=-1,
SUCCESS
};
int null(sqlist *list);
int full(sqlist *list);
int empty(sqlist *list);
sqlist* create_list();
int insert_tail(sqlist *list,datatype element);
int output(sqlist *list);
int delete_tail(sqlist *list);
void find_index(sqlist *list,int index);
void edit_index(sqlist *list,int index,datatype index_value);
void index_interposition(sqlist *list,int index,datatype index_value);
void index_delete(sqlist *list,int index);
void element_delete(sqlist *list,int element);
void element_change(sqlist *list,datatype element,datatype new_element);
void find_element(sqlist *list,datatype element);
void eliminate_same(sqlist *list);
void sort_list(sqlist *list);
sqlist *free_space(sqlist *list);
//调用
#endif
test.c
#include "head.h"
int null(sqlist *list)
{
return list==NULL?FALSE:SUCCESS;
}
int full(sqlist *list)
{
return list->len==MAXSIZE?FALSE:SUCCESS;
}
int empty(sqlist *list)
{
return list->len==0?FALSE:SUCCESS;
}
sqlist* create_list()//堆区创建
{
sqlist *list=(sqlist *)malloc(sizeof(sqlist));
if(null(list))
return NULL;
memset(list->data,0,sizeof(list->data));
list->len=0;
return list;
}
int insert_tail(sqlist *list,datatype element) //尾插
{
if(null(list)||full(list))
{
return FALSE;
}
list->data[list->len]=element;
list->len++;
}
int output(sqlist *list)//输出
{
if(null(list)||empty(list))
return FALSE;
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->data[i]);
}
puts("");
return SUCCESS;
}
int delete_tail(sqlist *list)//尾删
{
if(null(list)||empty(list))
return FALSE;
list->len--;
return SUCCESS;
}
void find_index(sqlist *list,int index)//下标查找
{
if(null(list)||empty(list)||index<0||index>=list->len)
return;
printf("the value of index is :%d\n",list->data[index]);
}
void edit_index(sqlist *list,int index,datatype index_value)//下标查找替换
{
if(null(list)||empty(list)||index<0||index>=list->len)
return;
list->data[index]=index_value;
}
void index_interposition(sqlist *list,int index,datatype index_value)//按下标插入
{
if(null(list)||full(list)||index<0||index>list->len)
return;
for(int i=list->len-1;i>=index;i--)
{
list->data[i+1]=list->data[i];
}
list->data[index]=index_value;
list->len++;
}
void index_delete(sqlist *list,int index)//按下标删除
{
if(null(list)||empty(list)||index<0||index>=list->len)
return;
for(int i=index;i<list->len;i++)
{
list->data[i]=list->data[i+1];
}
list->len--;
}
void element_delete(sqlist *list,datatype element)//按元素删除
{
if(null(list)||empty(list))
return;
int flag;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==element)
{
for(int j=i;j<list->len;j++)
{
list->data[j]=list->data[j+1];
}
list->len--;
flag=1;
}
}
if(flag!=1)
printf("Without this element!\n");
}
void element_change(sqlist *list,datatype element,datatype new_element)//按元素修改
{
if(null(list)||empty(list))
return;
int flag;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==element)
{
list->data[i]=new_element;
flag=1;
}
}
if(flag!=1)
printf("Without this element!\n");
}
void find_element(sqlist *list,datatype element)//按元素查找
{
int arr[100];
int *p=arr;
int flag=0;
if(null(list)||empty(list))
return;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==element)
{
*(p+flag)=i;
flag++;
}
}
if(flag==0)
printf("mismatch\n");
else
{
for(int i=0;i<flag;i++)
{
printf("the id is %d\n",*(p+i));
}
}
}
void eliminate_same(sqlist *list)//按元素去重
{
if(null(list)||empty(list)||list->len<=1)
return;
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])
{
index_delete(list,j);
j--;
}
}
}
}
void sort_list(sqlist *list)//简单选择排序
{
if(null(list)||empty(list)||list->len<=1)
return;
for(int i=0;i<list->len-1;i++)
{
int max=list->data[i];
int maxi=i;
for(int j=i+1;j<list->len;j++)
{
if(max<list->data[j])
{
max=list->data[j];
maxi=j;
}
}
if(maxi==i)
continue;
int t=list->data[i];
list->data[i]=list->data[maxi];
list->data[maxi]=t;
}
}
sqlist *free_space(sqlist *list) //顺序表释放
{
if(null(list))
return NULL;
free(list);
list=NULL;
return list;
}
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
sqlist *list=create_list();
int n;
printf("enter num:");
scanf("%d",&n);
datatype element;
for(int i=0;i<n;i++)
{
printf("enter %d element:",i+1);
scanf("%d",&element);
int flag=insert_tail(list,element);
if(flag==FALSE)
{
puts("NULL or full");
break;
}
}
output(list);
delete_tail(list);
output(list);
int index;
printf("enter the index:");
scanf("%d",&index);
find_index(list,index);
datatype index_value;
printf("enter the change index:");
scanf("%d",&index);
printf("enter index_value:");
scanf("%d",&index_value);
edit_index(list,index,index_value);
output(list);
printf("enter the index_interposition:");
scanf("%d",&index);
printf("enter the index_value:");
scanf("%d",&index_value);
index_interposition(list,index,index_value);
output(list);
printf("enter the index_delete:");
scanf("%d",&index);
index_delete(list,index);
output(list);
datatype element_del;
printf("enter the element:");
scanf("%d",&element_del);
element_delete(list,element_del);
output(list);
int new_element;
printf("enter the element:");
scanf("%d",&element);
printf("enter the new_element");
scanf("%d",&new_element);
element_change(list,element,new_element);
output(list);
printf("please enter the element you want find:");
scanf("%d",&element);
find_element(list,element);
eliminate_same(list);
output(list);
sort_list(list);
output(list);
free_space(list);
return 0;
}
实现过程