Python数据结构实验 顺序表的实现

一、实验目的

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

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值