seqlist.h分文件:
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAX 20
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[MAX];
int len;
}seqlist,*seq;
//创建
seq seqlist_create();
//插入
int seq_insert(seq P,int in_data);
//打印输出
int print_seq(seq P);
//判空
int seq_empty(seq P);
//判满
int seq_full(seq P);
//按位置插入
int insert_pos(seq P,int in_data,int pos);
//按位置删除
int del_pos(seq P,int pos);
//按值查找,返回对应位置的下标
int search_data(seq P,int in_data);
//按值删除元素
int del_data(seq P,int in_data);
//按位置修改
int updata_pos(seq P,int pos,int in_data);
//冒泡排序
int sort_seq(seq P);
//去重
int del_repetition(seq P);
//选择排序
int choose_seq(seq P);
//释放顺序表
int free_seq(seq *P);
#endif
seqlist.c:
#include "seqlist.h"
seq seqlist_create()
{
seq P=(seq)malloc(sizeof(seqlist));
if(P==NULL){
printf("申请失败\n");
return NULL;
}else{
printf("申请成功\n");
P->len=0;
return P;
}
}
int seq_insert(seq P,int in_data)
{
if(P==NULL)
return -1;
if(P->len>=MAX){
printf("空间不足\n");
return -2;
}P->data[P->len]=in_data;
P->len++;
return 0;
}
int print_seq(seq P)
{
if(P==NULL)
return -1;
for(int i=0;i<P->len;i++)
printf("%d\n",P->data[i]);
return 0;
}
int seq_full(seq P)
{
if(P==NULL)
return -1;
if(P->len==MAX)
printf("空间内所储存元素已满\n");
return 0;
}
int seq_empty(seq P)
{
if(P==NULL)
return -1;
if(P->len==0)
printf("储存元素为0,请输入\n");
return 0;
}
int insert_pos(seq P,int in_data,int pos)
{
if(P==NULL)
return -1;
for(int i=P->len;i>=pos-1;i--)
P->data[i]=P->data[i-1];
P->data[pos-1]=in_data;
P->len++;
return 0;
}
int del_pos(seq P,int pos)
{
if(P==NULL)
return -1;
for(int i=pos-1;i<P->len;i++)
P->data[i]=P->data[i+1];
P->len--;
return 0;
}
int search_data(seq P,int in_data)
{
if(P==NULL)
return -1;
int count=0;
for(int i=0;i<P->len;i++)
if(P->data[i]==in_data){
count++;
printf("第%d个下标为%d\n",count,in_data);
}
}
int del_data(seq P,int in_data)
{
int flag=1;
if(P==NULL)
return -1;
for(int i=0,j;i<P->len;i++)
if(P->data[i]==in_data){
for(j=i;j<P->len;j++)
P->data[j]=P->data[j+1];
P->len--;
flag=0;
}
if(flag)
printf("未找到该值\n");
return 0;
}
int updata_pos(seq P,int pos,int in_data)
{
if(P==NULL)
return -1;
if(pos>P->len||pos<=0){
printf("输入位置有误\n");
return -2;
}else
P->data[pos-1]=in_data;
return 0;
}
int sort_seq(seq P)
{
if(P==NULL)
return -1;
int temp;
for(int i=1,j;i<P->len;i++)
for(j=0;j<P->len-i;j++)
if(P->data[j]>P->data[j+1]){
temp=P->data[j];
P->data[j]=P->data[j+1];
P->data[j+1]=temp;
}return 0;
}
int del_repetition(seq P)
{
for(int i=0,j;i<P->len-1;i++)
for(j=i+1;j<P->len;j++)
if(P->data[i]==P->data[j]){
for(int k=j;k<P->len-1;k++)
P->data[k]=P->data[k+1];
P->len--;
}return 0;
}
int choose_seq(seq P)
{
int temp;
for(int i=0,j;i<P->len-1;i++)
for(j=i+1;j<P->len;j++)
if(P->data[i]<P->data[j]){
temp=P->data[i];
P->data[i]=P->data[j];
P->data[j]=temp;
}return 0;
}
int free_seq(seq *P)
{
if(*P==NULL||P==NULL)
return -1;
free(*P);
*P=NULL;
return 0;
}
主程序main.c:
#include <stdio.h>
#include "seqlist.h"
int main(int argc, const char *argv[])
{
seq P=seqlist_create();
seq_empty(P);
seq_full(P);
seq_insert(P,23);//输入值
seq_insert(P,38);
seq_insert(P,21);
seq_insert(P,32);
seq_insert(P,54);
seq_insert(P,21);
seq_insert(P,33);
seq_insert(P,3);
print_seq(P);//打印值
printf("**************\n");
insert_pos(P,44,5);//按位置插入
print_seq(P);
printf("**************\n");
del_pos(P,2);
print_seq(P);
printf("**************\n");
search_data(P,21);
del_data(P,54);
print_seq(P);
printf("**************\n");
updata_pos(P,2,33);
print_seq(P);
printf("**************\n");
sort_seq(P);//冒泡排序,升序
print_seq(P);
printf("**************\n");
del_repetition(P);//去重
print_seq(P);
printf("**************\n");
choose_seq(P);//选择排序,降序
print_seq(P);
printf("**************\n");
free_seq(&P);
print_seq(P);
return 0;
}