主程序
#include "fun.h"
int main(int argc, const char *argv[])
{
seq_p S=create_seq();
stu data;
printf("请问要输入几个学生的数据:");
int n;
scanf("%d",&n);
while(n--)
{
printf("姓名:\n");
scanf("%s",data.name);
printf("学号:\n");
scanf("%d",&data.id);
printf("成绩:\n");
scanf("%d",&data.score);
insert_tail(S,data);
}
show_seq(S);
printf("###################任意插入\n");
stu data2={"张三",22,99};
insert_loc(S,2,data2);//任意插入
show_seq(S);
del_loc(S,1);//任意删除
printf("###################删除\n");
show_seq(S);
stu data3={"李四",35,100};
chag_loc(S,3,data3);//修改
printf("###################修改\n");
show_seq(S);
printf("###################查找\n");
find_id(S,3);//id查找
printf("###################去重\n");
seq_rm(S);//q去重
show_seq(S);
printf("###################销毁\n");
free_seq(&S);//销毁
show_seq(S);
return 0;
}
源码
#include "fun.h"
//顺序表的创建
seq_p create_seq()
{
seq_p S=(seq_p)malloc(sizeof(seq));
if(S==NULL)
{
printf("顺序表创建失败\n");
return NULL;
}
S->len=0;
return S;
}
//判满
int full_seq(seq_p S)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return -1;
}
return S->len==MAX;
}
//判空
int empty_seq(seq_p S)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return -1;
}
return S->len ==0;
}
//尾插
void insert_tail(seq_p S,stu data)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(full_seq(S))
{
printf("表已满,无需插入\n");
return ;
}
S->data[S->len].id=data.id;
S->data[S->len].score=data.score;
strcpy(S->data[S->len].name,data.name);
S->len++;
}
//输出表
void show_seq(seq_p S)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(empty_seq(S))
{
printf("表已满,无需插入\n");
return ;
}
int i=0;
while(1)
{
printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);
if(++i==S->len)return;
}
}
//任意位置插入学生
void insert_loc(seq_p S,int n,stu data)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(full_seq(S))
{
printf("表已满,无需插入\n");
return ;
}
if(n<0||n>S->len)
{
return;
}
for(int i=S->len;i>n-1;i--)
{
strcpy(S->data[i].name,S->data[i-1].name);
S->data[i].id=S->data[i-1].id;
S->data[i].score=S->data[i-1].score;
}
strcpy(S->data[n-1].name,data.name);
S->data[n-1].id=data.id;
S->data[n-1].score=data.score;
S->len++;
}
//任意位置删除
void del_loc(seq_p S,int n)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(empty_seq(S))
{
printf("表已空,无需删除\n");
return ;
}
if(n<0||n>S->len)
{
return;
}
for(int i=n-1;i<S->len;i++)
{
strcpy(S->data[i].name,S->data[i+1].name);
S->data[i].id=S->data[i+1].id;
S->data[i].score=S->data[i+1].score;
}
S->len--;
}
//按位置修改
void chag_loc(seq_p S,int n,stu data)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(empty_seq(S))
{
printf("表已空,无需插入\n");
return ;
}
if(n<0||n>S->len)
{
return;
}
int flag=0;
for(int i=0;i<S->len;i++)
{
if(i==n-1)
{ flag=1;
strcpy(S->data[i].name,data.name);
S->data[i].id=data.id;
S->data[i].score=data.score;
}
}
if(flag==0)
{
printf("修改失败\n");
}
}
//按学号查找
void find_id(seq_p S,int id)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(empty_seq(S))
{
printf("表已空,无需查找\n");
return ;
}
int flag=0;
for(int i=0;i<S->len;i++)
{
if(S->data[i].id==id)
{
flag=1;
printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);
}
}
if(flag==0)
{
printf("查无此人\n");
}
}
//去重
void seq_rm(seq_p S)
{
if(S==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(empty_seq(S))
{
printf("表已空,无需去重\n");
return ;
}
for(int i=0;i<S->len;i++)
{
for(int j=i+1;j<S->len;j++)
{
if(S->data[i].name==S->data[j].name||S->data[i].id==S->data[j].id||S->data[i].score==S->data[j].score)
{
del_loc(S,j+1);
j--;
}
}
}
}
//销毁
void free_seq(seq_p *S)
{
if(*S==NULL)
{
printf("入参为空,请检查\n");
return;
}
free(*S);
*S=NULL;
}
头文件
#ifndef __FUN_H__
#define __FUN_H__
#include <myhead.h>
#define MAX 30
typedef struct student
{
char name[30];
int id;
int score;
}stu;
typedef struct sequece
{
stu data[MAX];
int len;
}seq,*seq_p;
seq_p create_seq();
int full_seq(seq_p);
int empty_seq(seq_p);
void insert_tail(seq_p S,stu data);
void show_seq(seq_p S);
void insert_loc(seq_p S,int n,stu data);
void del_loc(seq_p S,int n);
void chag_loc(seq_p S,int n,stu data);
void find_id(seq_p S,int id);
void seq_rm(seq_p S);
void free_seq(seq_p *S);
#endif