.h
#ifndef _xs_
#define _xs_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 15
/*******定义结构体和顺序表*****/
typedef struct{
int id;
char name[20];
char major[20];
int age;
}student;
typedef struct{
student date[20];
int len ;
}list , *Plist;
/*********函数声明*************/
Plist creat_list();
int full(Plist);
int empry(Plist);
student write_one(student);
int input_stu(Plist);//
int insert_stu(Plist ,int ,student);
int delete_stu(Plist , int);
int find_stu(Plist , int);
int change_stu(Plist , int );
int insert_stu_first(Plist);
int insert_stu_end(Plist);
int delete_stu_first(Plist);
int delete_stu_end(Plist L);
int delete_repeat(Plist);
int Scort_Name(Plist);
int find_name(Plist , char*);
#endif
.c
#include"_t.h"
int main(int argc, const char *argv[])
{
Plist L = creat_list();
int ch;
int n;//处理学生位
char Name[20];//处理名字操作
while(1){
printf("\t\t\t1.输入学生信息\n");
printf("\t\t\t2.任意位置插入\n");
printf("\t\t\t3.任意位置删除\n");
printf("\t\t\t4.任意位置查找\n");
printf("\t\t\t5.任意位置修改\n");
printf("\t\t\t6.表头插入\n");
printf("\t\t\t7.表尾插入\n");
printf("\t\t\t8.表头删除\n");
printf("\t\t\t9.表尾删除\n");
printf("\t\t\t10.去除重复学生\n");
printf("\t\t\t11.按照姓名查找\n");
printf("\t\t\t12.按照姓名顺序查找\n");
printf("\t\t\t0.退出\n");
printf("请输入你的选择:");
scanf("%d" , &ch);
if(0 == ch)break;//用break和return哪个更好?
switch(ch){
case 1 :
input_stu(L);
break;
case 2 :
printf("请输入要插入学生的信息:");
student e_in = write_one(e_in);
printf("请输入要插入的位置:");
n = 0;
scanf("%d",&n);
insert_stu(L,n,e_in);
break;
case 3 :
n = 0;
printf("请输入需要删除的学生的位置:");
scanf("%d" , &n);
delete_stu(L , n);
break ;
case 4 :
printf("请输入要查询学生的位置");
n = 0;
scanf("%d" , &n);
find_stu(L , n);
break;
case 5 :
printf("请输入要修改的学生的位置");
n = 0;
scanf("%d" ,&n);
change_stu(L , n);
break;
case 6 :
insert_stu_first(L);
break ;
case 7 :
insert_stu_end(L);
break;
case 8 :
delete_stu_first(L);
break;
case 9 :
delete_stu_end(L);
break;
case 10 :
delete_repeat(L);
break;
case 11 :
printf("请输入学生姓名:");
scanf("%s" ,Name);
find_name(L ,Name);
break ;
case 12 :
Scort_Name(L);
break;
default : printf("抱歉,请重新输入");
}
}
return 0;
}
.c
#include"_t.h"
//创建顺序表
Plist creat_list(){
Plist L = malloc(sizeof(list));
if(NULL == L){
printf("申请空间失败\n");
return L;
}
L->len = 0;//长度初始化
printf("申请空间成功\n");
return L;//返回初始地址
}
//判满
int full(Plist L){
if(L->len == MAX)
return 1;
return 0;
}
//判空
int empry(Plist L){
if(L->len ==0)
return 1;
return 0;
}
//输入单个学生信息
student write_one(student e){
printf("请输入学号:");
scanf("%d" , &e.id);
printf("请输入姓名:");
scanf("%s" , e.name);
printf("请输入专业:");
scanf("%s" , e.major);
printf("请输入年龄:");
scanf("%d" , &e.age);
return e;
}
//*循环输入学生信息
int input_stu(Plist L){
printf("请输入学生个数:");
int n ;
scanf("%d", &n);
for(int i = 0 ; i<n ;i++){
printf("请输入第%d个学生的信息",i+1);
printf("请输入学号:");
scanf("%d" , &L->date[i].id);
printf("请输入姓名:");
scanf("%s" , L->date[i].name);
printf("请输入专业:");
scanf("%s" , L->date[i].major);
printf("请输入年龄:");
scanf("%d" , &L->date[i].age);
L->len++;
}
return 0;
}
//**任意位置插入
int insert_stu(Plist L , int pos , student e){
int sub = pos -1;
if(sub<0||sub>L->len||NULL ==L||full(L)){
printf("插入失败\n");
return -1;
}
for(int i = L->len-1; i>sub;i--){
L->date[i+1] = L->date[i];
}
L->date[sub] = e;
L->len++;
printf("插入成功\n");
}
//***3
int delete_stu(Plist L,int pos){
int sub = pos-1;
if(empry(L)||sub < 0||sub > L->len||NULL == L||empry(L)){
printf("删除失败\n");
return -1;
}
for(int i = sub ; i<L->len -1;i++ ){
L->date[i] = L->date[i+1];
}
L->len--;
printf("删除成功\n");
}
//****4
int find_stu(Plist L , int pos){
int sub = pos -1;
if(sub<0 || sub>L->len-1||NULL == L||empry(L)){
printf("查询失败\n");
return -1;
}
printf("该学生的信息如下:\n");
printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\t\n", L->date[sub].id ,L->date[sub].name , L->date[sub].major,L->date[sub].age);
return 0;
}
//*****5
int change_stu(Plist L , int pos){
int sub = pos -1;
if(sub<0 || sub>L->len-1||NULL == L||empry(L)){
printf("修改失败\n");
return -1;
}else{
printf("该学生的信息如下:\n");
printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\t\n", L->date[sub].id ,L->date[sub].name , L->date[sub].major,L->date[sub].age);
printf("请输入修改后的学生信息:\n");
student NeW = write_one(NeW);
L->date[sub] = NeW;
printf("信息修改成功\n");
}
return 0;
}
//******6/、
int insert_stu_first(Plist L){
if(L==NULL||full(L)){
printf("表头插入失败\n");
return -1;
}
printf("请输入要插入学生的信息\n");
student e = write_one(e);
for(int i = L->len -1;i>0 ; i--){
L->date[i+1]=L->date[i];
}
L->date[0]=e;
L->len++;
printf("表头插入成功\n");
return 0;
}
//******7
int insert_stu_end(Plist L){
if(L==NULL||full(L)){
printf("表尾插入失败\n");
return -1;
}
printf("请输入要插入学生的信息\n");
student e = write_one(e);
L->date[L->len]=e;
L->len++;
printf("表尾插入成功\n");
return 0;
}
//*******8
int delete_stu_first(Plist L){
if(NULL == L||empry(L)){
printf("表头删除失败\n");
return -1;
}
for(int i = 0 ;i<L->len;i++){
L->date[i]=L->date[i+1];
}
L->len--;
printf("表头删除成功\n");
}
//*********9
int delete_stu_end(Plist L){
if(NULL == L|| empry(L)){
printf("表尾删除失败\n");
return -1;
}
L->date[L->len-1]=L->date[L->len];
L->len--;
printf("表尾删除成功\n");
}
//**********10
int delete_repeat(Plist L){
int i , j;
for(i=0 ; i<L->len;i++){
for(j=i+1; j<L->len;j++){
if(L->date[i].id == L->date[j].id){
delete_stu(L , j+1);
j--;
}
}
}
}
//***********11
int find_name(Plist L,char key[20]){
int i = 0;
for(i = 0 ; i < L->len;i++){
if(strcmp(key , L->date[i].name)==0){
find_stu(L , i);
}
}
}
//************12
int Scort_Name(Plist L ){
int i ,j;
for(i=1; i<L->len;i++){
for(j=0; j<L->len-i;j++){
if(strcmp(L->date[j].name , L->date[j+1].name)>0){
student temp;
temp = L->date[j];
L->date[j] = L->date[j+1];
L->date[j+1] = temp;
}
}
}
for(i=0 ; i<L->len;i++){
find_stu(L , i+1);
}
}