頭文件:head.h
#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 20enum num {success,false=-1};typedef int datatype;typedef struct
{int len;datatype data[MAXSIZE];
}Sqlist;Sqlist* create_sqlist();int insert(Sqlist* list,datatype element);void show(Sqlist *list);int tail_delete(Sqlist *list);int add_insert(Sqlist *list,int sub,datatype element);int delete_insert(Sqlist *list,int sub);int change_list(Sqlist *list,int sub,datatype element);void find(Sqlist *list,int sub);int find_data(Sqlist* list,datatype element);void delete_data(Sqlist* list,datatype element);void change_data(Sqlist* list,datatype element);
void del_double(Sqlist* list);
void swap(Sqlist* list);
void choice_swap(Sqlist* list);
#endif
測試文件:test.c
#include"head.h"//創建順序表
Sqlist * create_sqlist()
{Sqlist *list = (Sqlist*)malloc(sizeof(Sqlist));if(NULL == list){printf("創建失敗!");return NULL;}list->len=0;memset(list->data,0,sizeof(list->data));return list;
}//尾插
int insert(Sqlist* list,datatype element)
{if(NULL ==list||list->len==MAXSIZE){printf("插入失敗");return false;}list->data[list->len]=element;list->len++;return success;
}//展示順序表
void show(Sqlist *list)
{if(NULL==list ||list->len==0){printf("false");return ;}for(int i=0;i<list->len;i++){printf("%d\t",list->data[i]);}putchar(10);
}//尾刪
int tail_delete(Sqlist *list)
{if(NULL==list||list->len==0){printf("刪除失敗");return false;}list->data[list->len-1]=0;list->len--;return success;
}//給定下標插入數據
int add_insert(Sqlist *list,int sub,datatype element)
{if(NULL==list||list->len==MAXSIZE||sub<0||sub>list->len){printf("插入失敗\n");return false;}for(int i=list->len-1;i>=sub;i--){list->data[i+1]=list->data[i];}list->data[sub]=element;list->len++;return success;
}//給定下標刪除數據
int delete_insert(Sqlist *list,int sub)
{if(NULL==list||sub<0||sub>=list->len||list->len==0){printf("刪除失敗\n");return false;}for(int i=sub+1;i<list->len;i++){list->data[i-1]=list->data[i];}list->len--;return success;
}//給定下標修改數據
int change_list(Sqlist *list,int sub,datatype element)
{if(NULL==list ||sub<0||sub>=list->len||list->len==0){printf("修改失敗\n");return false;}list->data[sub]=element;return success;
}//給定下標查找數據
void find(Sqlist *list,int sub)
{if(NULL==list ||sub<0||sub>=list->len||list->len==0){printf("查找失敗\n");return ;}printf("%d\n",list->data[sub]);
}//按元素元素查找
int find_data(Sqlist* list,datatype element)
{if(NULL==list||list->len==0){printf("查找失敗\n");return false;}for(int i=0;i<list->len;i++){if(list->data[i]==element){return i;}}
}//按元素刪除
void delete_data(Sqlist* list,datatype element)
{int j=find_data(list,element);delete_insert(list,j);
}//按元素修改
void change_data(Sqlist* list,datatype element)
{int j=find_data(list,element);printf("請輸入修改的數據:");int data;scanf("%d",&data);change_list(list,j,data);
}//去重
void del_double(Sqlist* list)
{if(NULL==list||list->len==0||list->len==1){printf("去重失敗\n");return;}for(int i=0;i<list->len;i++){for(int j=i+1;j<list->len;j++){if(list->data[i]==list->data[j]){delete_insert(list,j);j--;}}}
}//冒泡排序
void swap(Sqlist* list)
{int t;if(NULL==list||list->len==0){printf("排序失敗\n");return;}for(int i=0;i<list->len-1;i++){for(int j=0;j<list->len-1-i;j++){if(list->data[j]<list->data[j+1])t=list->data[j];list->data[j]=list->data[j+1];list->data[j+1]=t;}}
}//選擇排序
void choice_swap(Sqlist* list)
{int t;int i;int min_index;if(NULL==list||list->len==0){printf("排序失敗\n");return;}for(i=1;i<list->len;i++){min_index=i-1;for(int j=i;j<list->len;j++){if(list->data[min_index]>list->data[j]){min_index=j;}}if(min_index!=i-1){t=list->data[min_index];list->data[min_index]=list->data[i-1];list->data[i-1]=t;}}
}
主文件:main.c
#include"head.h"int main(int argc, const char *argv[])
{Sqlist* list=create_sqlist();int n;datatype element;printf("請輸入插入幾個數:");scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&element);insert(list,element);}show(list);tail_delete(list);show(list);int sub;printf("請輸入添加數據的下標:");scanf("%d",&sub);printf("請輸入添加的數據:");scanf("%d",&element);add_insert(list,sub,element);show(list);printf("請輸入刪除的下標:");scanf("%d",&sub);delete_insert(list,sub);show(list);printf("請輸入修改的下標:");scanf("%d",&sub);printf("請輸入修改的數據:");scanf("%d",&element);change_list(list,sub,element);show(list);printf("請輸入查找的下標:");scanf("%d",&sub);find(list,sub);//按值查找printf("請輸入要查找的值:");scanf("%d",&element);int j=find_data(list,element);printf("要查找的值的下標為:%d\n",j);//按值刪除printf("請輸入要刪除的值:");scanf("%d",&element);delete_data(list,element);show(list);//按值修改 printf("請輸入要修改的值:");scanf("%d",&element);change_data(list,element);show(list);//去重del_double(list);printf("去重后的數據為:");show(list);//冒泡排序swap(list);printf("降序后的結果為:");show(list);//選擇排序choice_swap(list);printf("升序后的結果為:");show(list);return 0;
}
運行結果: