用顺序表创建学生列表——python

源代码:

class Student:
    def __init__(self,list_max=5):
        self.list_max = list_max
        self.size = 0
        self.l = [None] * list_max

    #判满
    def list_full(self):
        return self.size == self.list_max

    #判空
    def list_empty(self):
        return self.size == 0

    #增加
    def append_list(self,name,age,sex):
        student = {"name":name,"age":age,"sex":sex}
        if self.list_full():
            print("列表已满")
            return
        else:
            self.l[self.size] = student
            self.size+=1

    #遍历
    def print_list(self):
        if self.list_empty():
            print("列表为空")
            return
        for i in range(self.size):
            print(self.l[i])

    #插入
    def insert_list(self,name,age,sex,index):
        student = {"name": name, "age": age, "sex": sex}
        if self.list_full() or index<0 or index>self.list_max:
            print("列表已满")
            return
        else:
            for i in range(self.size - index):
                self.l[self.size-i] = self.l[self.size-i-1]
            self.l[index] = student
            self.size+=1
            return
    #删除
    def del_list_value(self,index):
        if self.list_empty() or index<0 or index>=self.list_max:
            print("列表为空")
            return
        else:
            n = index
            while n<self.size-1:
                self.l[n] = self.l[n+1]
                n+=1
            self.size-=1
            return
    # 修改
    def change_list(self, old_name, new_age, new_sex):
        if self.list_empty():
            print("列表为空")
            return
        found = False
        for i in range(self.size):
            if self.l[i]['name']==old_name:
                self.l[i]['age'] = new_age
                self.l[i]['sex'] = new_sex
                found = True

        if not found:
            print("未查询到此人")
            return

    #去重
    def distinct_list(self):
        for i in self.l:
            for j in range(self.size):
                if self.l[j] == i:
                    n = j+1
                    while n<self.size:
                        if self.l[n] == i:
                            self.del_list_value(n)
                        else:
                            n+=1


if __name__ == '__main__':
    student = Student()
    student.append_list('张三',12,'男')
    student.append_list('李四', 15, '男')
    student.append_list('李四', 15, '男')
    student.append_list('李四', 15, '男')
    student.append_list('小王', 18, '男')
    # student.append_list('小明', 12, '男')
    student.print_list()

#测试
    # print("*" * 100)
    # student.insert_list('小明', 12, '男',1)
    # student.print_list()
    #
    # print("*" * 100)
    # student.change_list("小明",18,'女')
    # student.print_list()
    #
    # print("*" * 100)
    # student.del_list_value(2)
    # student.print_list()

    # print("*" * 100)
    # student.distinct_list()
    # student.print_list()

1、顺序表的创建:

#封装一个顺序表的类
class Student:
    #显示调用构造函数
    def __init__(self,list_max=5):
        self.list_max = list_max
        self.size = 0 #已经存储的个数
        self.l = [None] * list_max

2、判满、判空

#判满
    def list_full(self):
        return self.size == self.list_max

    #判空
    def list_empty(self):
        return self.size == 0

3、顺序表的增加(尾插)

函数的功能:往顺序表中增加元素。 思路:将要添加的元素,放入顺序表下标为size的位置中。

函数名:符合命名规则

函数的返回值:增加成功 返回True 增加失败 返回False

参数列表:self 顺序表、要增加的数据

注意事项:1、判满

                  2、增加成功,顺序表的长度自增

 #增加
    def append_list(self,name,age,sex):
        student = {"name":name,"age":age,"sex":sex}
        if self.list_full():
            print("列表已满")
            return
        else:
            self.l[self.size] = student
            self.size+=1

4、顺序表的遍历

函数的功能:打印顺序表中的所有元素 (思路)

函数名:符合命名规则

函数的返回值:无

参数列表:self 顺序表

注意事项:1、判空

 #遍历
    def print_list(self):
        if self.list_empty():
            print("列表为空")
            return
        for i in range(self.size):
            print(self.l[i])

5、顺序表任意位置插入数据

函数名:符合命名规则

函数的返回值:增加成功 返回True 增加失败 返回False

参数列表:self 顺序表、要插入的位置、要插入的数据

注意事项:      1、判满

                        2、判断要插入的位置是否合理

                        3、插入成功 顺序表长度自增

  #插入
    def insert_list(self,name,age,sex,index):
        student = {"name": name, "age": age, "sex": sex}
        if self.list_full() or index<0 or index>self.list_max:
            print("列表已满")
            return
        else:
            for i in range(self.size - index):
                self.l[self.size-i] = self.l[self.size-i-1]
            self.l[index] = student
            self.size+=1
            return

6、 顺序表任意位置删除

函数的功能:在顺序表的任意位置删除。思路(如上图)

函数名:符合命名规则

函数的返回值:增加成功 返回True 增加失败 返回False

参数列表:self 顺序表,要删除的位置

注意事项:      1、判空

                        2、判断要删除的位置是否合理

                        3、成功删除 顺序表长度自减

 def del_list_value(self,index):
        if self.list_empty() or index<0 or index>=self.list_max:
            print("列表为空")
            return
        else:
            n = index
            while n<self.size-1:
                self.l[n] = self.l[n+1]
                n+=1
            #删除成功,长度自减
            self.size-=1
            return

7、按照姓名修改

# 修改
    def change_list(self, old_name, new_age, new_sex):
        if self.list_empty():
            print("列表为空")
            return
        found = False
        for i in range(self.size):
            if self.l[i]['name']==old_name:
                self.l[i]['age'] = new_age
                self.l[i]['sex'] = new_sex
                found = True

        if not found:
            print("未查询到此人")
            return

8、去重

函数功能:顺序表删掉重复的数据。思路:将顺序表遍历一遍,对每个元素而言,查找该元素后是否有跟自己相等的元素,如果有,则删除那个元素,注意不要漏删

函数的返回值:无

函数名:符合命名规则

参数列表:顺序表

注意事项:1、需要判断顺序表是否为空,表长是否大于

 #去重
    def distinct_list(self):
        for i in self.l:
            for j in range(self.size):
                if self.l[j] == i:
                    n = j+1
                    while n<self.size:
                        if self.l[n] == i:
                            self.del_list_value(n)
                        else:
                            n+=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值