//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);