0%

第一次数据结构实验

数据结构老师授课态度真好,真是女神级别的🤓

大二学习数据结构-顺序表SqList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define MAXSIZE 100

typedef int Status;
//定义元素
typedef struct{
char name[20];
char numb[10];
double scroe;
}student;
typedef student ElemType;
//顺序表的创建
typedef struct
{
ElemType *elem;
int length;
}SqList;
//顺序表的初始化
Status InitList(SqList &L){
L.elem = new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
//顺序表的查找
Status Search(SqList &L,char str[])
{
for(int i=0 ; i<=L.length ; i++)
if(strcmp(L.elem[i].name,str)==0)
return i+1;
return 0;
}
//顺序表的取值
ElemType GetElem(SqList L,int i)
{
return L.elem[i-1];
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e){
int j;
if((i<1)||(i>L.length+1)) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(j=L.length-1 ; j>=i-1 ; j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
//顺序表的删除
Status ListDelete(SqList &L,int i){
int j;
if((i<1)||(i>L.length)) return ERROR;
for(j=i;j<=L.length-1;j++)
L.elem[j-1] = L.elem[j];
--L.length;
return OK;
}
void Input(ElemType *e){
printf("请输入学生的姓名:");
scanf("%s",e->name);
printf("请输入学生的学号:") ;
scanf("%s",e->numb);
printf("请输入学生的成绩:");
scanf("%lf",&e->scroe);
printf("输入完成\n\n");
}
void Output(ElemType *e)
{
printf("姓名:%s\n学号:%s\n成绩:%.2lf\n\n",e->name,e->numb,e->scroe);
}

int main(){
SqList L;
ElemType a,b,e,c,d;
int n,x,s,m,h,isDel;
char str[20];

do{
puts(" *******************************");
puts("");
puts(" 选项1:构造线性表,录入学生信息");
puts(" 选项2: 显示所有学生信息");
puts(" 选项3:根据姓名进行查找学生信息");
puts(" 选项4:根据指定的位置返回学生信息");
puts(" 选项5:把学生插入到表中指定的位置");
puts(" 选项6:删除指定位置的学生记录");
puts(" 选项7:统计表中学生个数");
puts(" 选项0:退出");
puts("");
puts(" *******************************");
printf("请输入选项前的数字:");
scanf("%d",&n);
puts("");
switch(n){
case 0:break;

case 1:
if(InitList(L))
printf("成功建立顺序表\n\n");
else
printf("顺序表建立失败\n\n");
printf("请输入要录入学生的人数:");
scanf("%d",&x);
for(int i=0;i<x;i++)
{
printf("第%d个学生:\n",i+1);
Input(&L.elem[i]);
}
L.length=x;
puts("");
break;
case 2:
printf("全部学生信息:\n\n");
for(int i=1;i<=L.length;i++)
{
a=GetElem(L,i);
Output(&a);
}
break;
case 3:
printf("请输入姓名:");
scanf("%s",str);
Search(L,str);
if(Search(L,str))
Output(&L.elem[Search(L,str)-1]);
else
puts("对不起,查无此人");
puts("");
break;
case 4:
printf("请输入位置:");
scanf("%d",&s);
b=GetElem(L,s);
Output(&b);
break;
case 5:
printf("请输入要插入的位置:");
scanf("%d",&m);
Input(&c);
if(ListInsert(L,m,c)){
printf("插入成功!查看全部学生请输入2");
break;
}
else{
printf("插入失败\n");
}
break;
case 6:
printf("请输入要删除学生信息的位置");
scanf("%d",&h);
printf("被删除学生的信息为\n");
Output(&L.elem[h-1]);
puts("确认是否永久删除,(1表示是,0表示撤销)请输入:");
scanf("%d",&isDel);
if(isDel){
if(ListDelete(L,h))
printf("删除成功!\n");
else
printf("删除失败!\n");
}
else if(!isDel)
printf("撤销成功!");
break;
case 7:
printf("当前信息系统共有%d名学生!",L.length);
}
}while(n);
return 0;
}