//1:创建顺序表
//2:判满
//3:判空
//4:插入学生信息
//5:输出学生信息
//6:按位置插入学生信息
//7:按位置删除学生信息
//8:按位置修改学生信息
//9:按学号查找学生信息
//10:顺序表去重
//11:销毁顺序表
main.c:
int main(int argc, const char *argv[])
{
seq_p H=seq_create();//--1创建
seq_full(H); //--2判满
seq_empty(H); //--3判空
seq_input(H); //--4插入学生信息
seq_show(H); //--5输出
insert_pos(H,2); //--6按位置插入学生信息
seq_show(H); //--5输出
del_pos(H,3); //--7按位置删除学生信息
change_pos(H,3); //--8按位置修改学生信息
seq_show(H); //--5输出
find_id(H,1001); //--9按学号查找学生信息
del_same(H); //--10去重
seq_free(&H);
return 0;
}
seq.c:
#include"seq.h"
//1:创建顺序表
seq_p seq_create()
{
seq_p H=(seq_p)malloc(sizeof(seq));
if(H==NULL)
{
printf("---顺序表创建失败---\n");
return 0;
}
H->len=0;
memset(H->data,0,sizeof(H->data));
printf("---顺序表创建成功---\n");
return H;
}
//2:判满
int seq_full(seq_p H)
{
if(H==NULL)
{
printf("---2入参为空,请检查---\n");
return 0;
}
return H->len==MAX;
}
//3:判空
int seq_empty(seq_p H)
{
if(H==NULL)
{
printf("---3入参为空,请检查---\n");
return 0;
}
return H->len==0;
}
//4:插入学生信息
int seq_input(seq_p H)
{
if(H==NULL||seq_full(H))
{
printf("---学生信息输入失败---\n");
return 0;
}
int x=0;
printf("请输入学生的数量:");
scanf("%d",&x);
printf("\n");
for(int i=0;i<x;i++)
{
printf("第%d位学生信息\n",i+1);
printf("姓名:");
scanf("%s",H->data[i].name);
printf("成绩:");
scanf("%d",&H->data[i].sorce);
printf("学号:");
scanf("%d",&H->data[i].id);
}
H->len=x;
return 1;
}
//5:输出学生信息
int seq_show(seq_p H)
{
if(H==NULL||seq_empty(H))
{
printf("---输出有误,请检查---\n");
return 0;
}
printf("%d名学生信息如下:\n",H->len);
printf("-------------------------\n");
printf("姓名\t成绩\t学号\n");
for(int i=0;i<H->len;i++)
{
printf("%s\t%d\t%d\n",H->data[i].name,H->data[i].sorce,H->data[i].id);
}
}
//6:按位置插入学生信息
int insert_pos(seq_p H,int pos)
{
if(H==NULL||seq_full(H))
{
printf("---不可插入学生信息---\n");
return 0;
}
if(pos<=0||pos>H->len)
{
printf("---位置有误---\n");
return 0;
}
for(int i=H->len-1;i>=pos-1;i--)
{
H->data[i+1]=H->data[i];
}
printf("\n");
printf("插入学生信息为:\n");
printf("姓名:");
scanf("%s",H->data[pos-1].name);
printf("成绩:");
scanf("%d",&H->data[pos-1].sorce);
printf("学号:");
scanf("%d",&H->data[pos-1].id);
H->len++;
return 1;
}
//7:按位置删除学生信息
int del_pos(seq_p H,int pos)
{
if(H==NULL||seq_empty(H))
{
printf("---不可删除学生信息---\n");
return 0;
}
if(pos<=0||pos>H->len)
{
printf("---位置有误---\n");
return 0;
}
for(int i=pos-1;i<H->len;i++)
{
H->data[i]=H->data[i+1];
}
H->len--;
return 1;
}
//8:按位置修改学生信息
int change_pos(seq_p H,int pos)
{
if(H==NULL||seq_empty(H))
{
printf("---不可修改学生信息---\n");
return 0;
}
if(pos<=0||pos>H->len)
{
printf("---位置有误---\n");
return 0;
}
printf("修改第%d位学生信息\n",pos);
printf("姓名:");
scanf("%s",H->data[pos-1].name);
printf("成绩:");
scanf("%d",&H->data[pos-1].sorce);
printf("学号:");
scanf("%d",&H->data[pos-1].id);
return 1;
}
//9:按学号查找学生信息
int find_id(seq_p H,int id)
{
if(H==NULL||seq_empty(H))
{
printf("---不可查找学生信息---\n");
return 0;
}
for(int i=0;i<H->len;i++)
{
if(H->data[i].id==id)
{
printf("学号为%d的学生信息为:姓名:%s 成绩:%d 学号:%d\n",id,H->data[i].name,H->data[i].sorce,H->data[i].id);
return 1;
}
}
printf("---没有该学号---\n");
return 1;
}
//10:顺序表去重
int del_same(seq_p H)
{
if(H==NULL||seq_empty(H))
{
printf("---入参为空,请检查---\n");
return 0;
}
for(int i=0;i<H->len;i++)
{
for(int j=i+1;j<H->len;j++)
{
if(H->data[i].name==H->data[j].name)
{
del_pos(H,j+1);//传的是位置,不是下标
j--;//防止漏删
}
}
}
return 1;
}
//11:销毁顺序表
void seq_free(seq_p *H)
{
if(*H==NULL)
{
printf("---入参为空,请检查---\n");
return;
}
free(*H);
*H=NULL;
printf("---顺序表空间已释放---\n");
}
seq.h:
#ifndef __SEQ_H__
#define __SEQ_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 30
typedef char Datatype;
typedef struct stu
{
Datatype name[32];
int sorce;
int id;
}student;
typedef struct seq
{
student data[MAX];
int len;
}seq,*seq_p;
//1:创建顺序表
seq_p seq_create();
//2:判满
int seq_full(seq_p H);
//3:判空
int seq_empty(seq_p H);
//4:插入学生信息
int seq_input(seq_p H);
//5:输出学生信息
int seq_show(seq_p H);
//6:按位置插入学生信息
int insert_pos(seq_p H,int pos);
//7:按位置删除学生信息
int del_pos(seq_p H,int pos);
//8:按位置修改学生信息
int change_pos(seq_p H,int pos);
//9:按学号查找学生信息
int find_id(seq_p H,int id);
//10:顺序表去重
int del_same(seq_p H);
//11:销毁顺序表
void seq_free(seq_p *H);