作业:
#main函数
#include"head.h"
int main(int argc,char *argv[])
{
sqlist*list= create();
//循环调用尾插函数
int n;
datatype element;
printf("Please enter n\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("please enter %d insert element :",i+1);
scanf("%d",&element);
int flag=insert_rear(element,list);
if(flag==FALSE)
{
printf("NULL or FULL\n");
break;
}
}
//循环遍历
output(list);
//按任意元素修改
int key;
printf("please enter revise key:\n");
scanf("%d",&key);
int flag_revise_key=revise_key(list,key);
if(SUCCESS==flag_revise_key)
{
printf("修改成功\n");
output(list);
}
else {printf("删除失败\n");output(list);}
// 按任意元素删除
int key;
printf("please enter delete key:\n");
scanf("%d", &key);
int flag_delete_key=delete_key(list,key);
if(SUCCESS==flag_delete_key)
{
printf("删除成功\n");
output(list);
}
else {printf("删除失败\n");output(list);}
//排序
int flag_sort=sort_list(list);
if(SUCCESS==flag_sort)
{
printf("排序成功\n");
output(list);
}
else printf("排序失败\n");
//释放空间
int flag_free=free_list(list);
if(SUCCESS==flag_free)
{
printf("释放成功\n");
}
else printf("释放失败\n");
return 0;
}
#函数定义test.c
#include"head.h"
//创建函数
sqlist* create()
{
sqlist *list=(sqlist*)malloc(sizeof(sqlist));
if(NULL==list)
return NULL;
//成功返回地址
//对数据元素清0
memset(list->data,0,sizeof(list->data));
//顺序标长度清0
list->len=0;
return list;
}
//判list满
int full(sqlist *list)
{
return list->len==MAXSIZE?FALSE:SUCCESS;
}
//判空
int empty(sqlist *list)
{
return list->len==0?FALSE:SUCCESS;
}
//尾插
int insert_rear(datatype element,sqlist* list)
{
//判断顺序表是否h创建成功
//判断顺序表是否为满
if(NULL==list || full(list) )
return FALSE;
list->data[list->len++]=element;
return 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]);
}
printf("\n");
}
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)
{
printf("ERROR\n");
return;
}
printf("The index element is %d \n",list->data[index]);
}
//修改
int revise_index(sqlist* list,int index)
{
if(NULL==list || empty(list ) || index<0 || index>=list->len)
return FALSE;
int revise_num;
search_index(list,index);
printf("请输入修改后的值\n");
scanf("%d",&revise_num);
list->data[index]=revise_num;
return SUCCESS;
}
//随机插入
int insert_index(sqlist * list,int index,int element)
{
if(NULL==list || full(list) || index<0 || index> list->len)
return FALSE;
for(int i=list->len-1;i>=index;i--)
{
list->data[i+1]=list->data[i];
}
list->data[index]=element;
list->len++;
return SUCCESS;
}
//删除任意下标值
int delete_index(sqlist* list,int index)
{
if(NULL==list || empty(list) || index<0 || index>=list->len)
return FALSE;
for(int i=index+1;i<list->len;i++)
{
list->data[i-1] = list->data[i];
}
list->len--;
return SUCCESS;
}
//查找任意元素,并返回下标
int search_key(sqlist* list,int key)
{
if(NULL==list || empty(list))
return -1;
int index=-1;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==key)
{
index=i;
break;
}
}
return index;
}
int revise_key(sqlist* list,int key)
{
if(NULL==list || empty(list))
return FALSE;
int index_first=search_key(list,key);
revise_index(list,index_first);
return SUCCESS;
}
int delete_key(sqlist* list,int key)
{
if(NULL==list || empty(list))
return FALSE;
int index_first=search_key(list,key);
delete_index(list,index_first);
return SUCCESS;
}
int remove_repeating(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
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_index(list,j);
j--;
}
}
}
return SUCCESS;
}
int sort_list(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
for (int i = 0; i < list->len - 1; i++)
{
for (int j = i; j < list->len; j++)
{
if (list->data[i] > list->data[j])
{
list->data[i] += list->data[j];
list->data[j] = list->data[i] - list->data[j];
list->data[i] -= list->data[j];
}
}
}
return SUCCESS;
}
int free_list(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
free(list);
list = NULL;
return SUCCESS;
}
#头文件head.h
#ifndef _HEAD_H__
#define _HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
enum num
{
FALSE=-1,
SUCCESS
};
#define MAXSIZE 7
typedef int datatype;
typedef struct SQLIST
{
datatype data[MAXSIZE];
int len;
}sqlist;
//函数声明
sqlist* create();
int full(sqlist *list);
int insert_rear(datatype element,sqlist* list);
int output(sqlist *list);
int delete_rear(sqlist* list);
void search_index(sqlist* list,int index);
int revise_index(sqlist* list,int index);
int insert_index(sqlist * list,int index,int element);
int delete_index(sqlist* list,int index);
int search_key(sqlist* list,int key);
int revise_key(sqlist* list,int key);
int delete_key(sqlist* list,int key);
int remove_repeating(sqlist *list);
int free_list(sqlist *list);
int remove_repeating(sqlist *list);
#endif
1.顺序表按任意元素修改
源代码:
nt revise_key(sqlist* list,int key)
{
if(NULL==list || empty(list))
return FALSE;
int index_first=search_key(list,key);
revise_index(list,index_first);
return SUCCESS;
}
效果图:
2.顺序表按任意元素修改
源代码:
int delete_key(sqlist* list,int key)
{
if(NULL==list || empty(list))
return FALSE;
int index_first=search_key(list,key);
delete_index(list,index_first);
return SUCCESS;
}
效果图:
3.顺序表排序
源代码:
int sort_list(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
for (int i = 0; i < list->len - 1; i++)
{
for (int j = i; j < list->len; j++)
{
if (list->data[i] > list->data[j])
{
list->data[i] += list->data[j];
list->data[j] = list->data[i] - list->data[j];
list->data[i] -= list->data[j];
}
}
}
return SUCCESS;
}
效果图:
4.顺序表释放空间
源代码:
int free_list(sqlist *list)
{
if(NULL==list || empty(list))
return FALSE;
free(list);
list = NULL;
return SUCCESS;
}