一、实验目的
1.掌握用Python定义线性表的顺序存储类型;
2.掌握用Python调试顺序表的基本方法;
3.掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现;
二、实验环境
1.Windows操作系统的计算机
2.Python3.7环境平台和PyCharm编辑器
三、实验说明
1.实现线性表顺序存储结构的基本操作。
2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。
3.自主编写程序,必要时参考相关资料。
4.实验学时:2学时
四、实验内容和步骤
1.实验内容
(1) 基础实验题
设计整数顺序表的基本运算程序,并用相关数据进行测试。
(2) 应用实验题
编写一个简单的学生成绩管理程序,每个学生记录包含学号、姓名、课程和分数,采用顺序表存储,完成以下功能:
- 屏幕显示所有学生记录。
- 输入一个学生记录。
- 按学号和课程删除一个学生记录。
- 按学号排序并输出所有学生记录。
- 按课程排序,对于一门课程,学生按分数递减排序。
2.实验步骤
(1)分析实验内容,写出程序大致框架或完整的程序代码。
(2)进入Python集成环境。
(3)编辑程序并进行保存。
(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。
(5)检查程序输出结果。
五、实验代码与结果(程序运行代码及其结果)
1.
class SqList:
def __init__(self):
self.initcapacity=100;
self.capacity=self.initcapacity
self.data=[None]*self.capacity
self.size=0
def resize(self,newcapacity):
assert newcapacity >=0
olddata=sef.data
self.data=[None]*self.newcapacity
for i in range(self.size):
self.data[i]=olddata[i]
def Createlist(self,a):
for i in range(0,len(a)):
if self.size==self.capacity:
self.resize(2*self.size);
self.data[self.size]=a[i]
self.size+=1
def Add(self,e):
if self.size==self.capacity:
self.resize(2*self.size)
self.data[self.size]=e
self.size+=1
def getsize(self):
return self.size
def getitem(self,i):
assert 0<=i<self.size
return self.data[i]
def setitem(self,i,x):
assert 0<=i<self.size
self.data[i]=x
def GetNo(self,e):
i=0;
while i<self.size and self.data[i]!=e:
i+=1
if (i>=self.size):
return -1;
else:
return i;
def Inserrt(self,i,e):
assert 0<=i<=self.size
if self.size==self.capacity:
self.resize(2*self.size)
for j in range(self.size,i-1,-1):
self.data[j]=self.data[j-1]
self.data[i]=e
self.size+=1
def Delete(self,i):
assert 0<=i<=self.size-1
for j in range(i,self.size-1):
self.data[j]=self.data[j+1]
self.size-=1
if self.capacity>self.initcapacity and self.size<=self.capacity/4:
self.resize(self.capacity//2)
def display(self):
for i in range(0,self.size):
print(self.data[i],end=' ')
print()
if __name__ =='__main__':
L=SqList()
for i in range(1,11):
L.Add(i)
print("生成顺序表L: ",end=''),L.display()
print("求顺序表的长度")
print("顺序表长度:",L.getsize)
print("求序号为7的元素")
print("序号7的元素:",L.getitem(7))
print("将序数为9的元素改成250")
L.setitem(9,250)
print("顺序表L: ",end=''),L.display()
print("求元素为7的逻辑序号")
print("元素7的序号为:",L.GetNo(7))
print("将1314插入顺序表作为第1个元素")
L.Inserrt(0,1314)
print("顺序表L: ",end=''),L.display()
print("删除序号为9的元素")
L.Delete(9)
print("顺序表L: ",end=''),L.display()
print()
2.
from operator import itemgetter
class StudList:
def __init__(self):
self.data = []
def Addstud(self):
print("请输入学生信息")
no1 = int(input(" 学号(格式21005072XX):"))
name1 = input(" 姓名:")
course1 = input(" 课程:")
fraction1 = int(input(" 分数:"))
self.data.append([no1,name1,course1,fraction1])
def Dispstud(self):
if len(self.data) > 0:
print("\t学号\t\t姓名\t\t课程\t\t课程\t\t分数")
for i in range(len(self.data)):
print("\t%d\t\t%s\t\t%s\t\t%d"%(self.data[i][0],
self.data[i][1],self.data[i][2],self.data[i][3]))
else:
print("**没有该学生记录")
def Delstud(self):
no1 = int(input(" 请输入想删除的学号:"))
course1 = input(" 请输入想删除的课程:")
find = False
for i in range(len(self.data)):
if self.data[i][0] == no1 and self.data[i][2] == course1:
find = True
break
if find:
st.data.remove(self.data[i])
print("**成功删除学号为%d的学生记录"%(no1))
else:
print("**未能找到学号为%d的学生记录"%(no1))
def Sort1(self):
self.data = sorted(self.data.key == itemgetter(0))
self.Dispstud()
def Sort2(self):
self.data.sort(key = lambda s:(s[2], -s[3]))
self.Dispstud()
st = StudList()
def meun():
menu_info =''' ***GDPU学生成绩管理系统***
***** 1.显示全部学生成绩信息 *****
***** 2.输入学生信息 *****
***** 3.删除学生信息(按学号、课程) *****
***** 4.显示学生成绩(按学号排序) *****
***** 5.排列成绩(按课程从高到低) *****
***** 0.退出系统 *****
'''
print(menu_info)
while True:
meun()
choice=int(input('请输入功能序号:'))
if choice == 1:st.Dispstud()
elif choice == 2:st.Addstud()
elif choice == 3:st.Delstud()
elif choice == 4:st.Sort1()
elif choice == 5:st.Sort2()
else:break