乐趣区

关于java:Java数据结构及算法算法的4路描述方式

本文首发自「慕课网」,想理解更多 IT 干货内容,程序员圈内热闻,欢送关注 ” 慕课网 ”!
作者:老卫 | 慕课网讲师


要定义一个算法,咱们能够用自然语言、流程图、伪代码的形式形容解决某个问题的过程或是编写一段程序来实现这个过程。比方,在后面所举的“学生信息管理系统”例子中,咱们心愿实现增加用户、删除用户、查问用户三个算法。
1. 自然语言形容算法
能够采纳自然语言的形式来形容增加用户、删除用户、查问用户三个算法:

  • 增加用户:将用户信息增加到零碎中。如果曾经增加了过该用户的信息,则提醒用户。否则将用户信息增加到零碎中,并给出提醒。
  • 删除用户:将用户信息从零碎中删除。如果用户信息不存在于零碎中,则提醒用户。否则将用户信息从零碎中删除,并给出提醒。
  • 查问用户:将零碎中所有的用户信息查问进去。如果零碎中不存在用户,则提醒用户。否则将用户信息查问进去返回,并将用户信息打印进去。
    应用自然语言形容的益处是任何人都能看懂。当然相比于伪代码或者程序语言而言,应用自然语言形容有时会显得繁琐。

2. 流程图形容算法
流程图(Flow Diagram)是一种通用的图形符号表示法是一种非正式的,能够分明形容步骤和判断。图 1 - 2 展现的是用流程图的形式来形容增加用户、删除用户、查问用户三个算法。

相比拟自然语言而言,通过流程图的形容,能够很分明的看到操作的流向及通过的步骤。但须要留神的是,流程图应该只形容外围的操作步骤以及要害的节点判断,而不是事无巨细的把所有的操作都形容进去,否则只会让整个图看上去简单难以了解。

3. 伪代码形容算法
伪代码(Pseudocode)是一种非正式的,相似于英语构造的,用于形容模块结构图的语言。能够采纳伪代码的形式来形容增加用户、删除用户、查问用户三个算法。
增加用户的伪代码如下:

input(student)
if student in studentList
    print "Student exsit"
else 
    add student in studentList
    print "Add student success"

删除用户的伪代码如下:

input(student)
if student in studentList
    remove student from studentList
    print "Remove student success"
else 
    print "Student not exsit"

查问用户的伪代码如下:

if student in studentList
    output studentList
else 
    print "No student exsit"

伪代码构造清晰、代码简略、可读性好,并且相似自然语言。介于自然语言与编程语言之间。以编程语言的书写模式指明算法职能。应用伪代码,不必拘泥于具体实现。相比程序语言(例如 Java、C++、C 等等)它更相似自然语言。它尽管不是规范的语言,却能够将整个算法运行过程的构造用靠近自然语言的模式(能够应用任何一种你相熟的文字,要害是把程序的意思表达出来)形容进去。

4. 程序语言形容算法
程序语言形容算法,实际上就是用程序语言实现算法。不同的编程语言其语法不尽相同。以下是采纳 Java 语言的形式来形容增加用户、删除用户、查问用户三个算法。

import java.util.ArrayList;
import java.util.List;

public class StudentInfoManageSystem {private List<Student> studentList = new ArrayList<>();

    public void addStudent(Student student) {
        // 如果曾经增加了过该用户的信息,则提醒用户。// 否则将用户信息增加到零碎中,并给出提醒。if (studentList.contains(student)) {System.out.println("Student exsit");
        } else {studentList.add(student);
            System.out.println("Add student success");
        }
    }

    public void removeStudent(Student student) {
        // 如果用户信息不存在于零碎中,则提醒用户。// 否则将用户信息从零碎中删除,并给出提醒。if (studentList.contains(student)) {studentList.remove(student);
            System.out.println("Remove student success");
        } else {System.out.println("Student not exsit");
        }
    }

    public List<Student> getStudentList() {
        // 如果零碎中不存在用户,则提醒用户。// 否则将用户信息查问进去返回,并将用户信息打印进去。if (studentList.isEmpty()) {System.out.println("No student exsit");
        } else {for (Student s : studentList) {
                System.out.format("Student info: name %s, age %d, phone %s, address %s%n", 
                        s.getName(), s.getAge(), s.getPhoneNumer(), s.getAddress());
            }
        }

        return studentList;
    }
}

为了演示上述算法,还须要一个利用入口。咱们用 StudentInfoManageSystemDemo 类来示意利用主程序,代码如下:

import java.util.ArrayList;
import java.util.List;

public class StudentInfoManageSystemDemo {public static void main(String[] args) {
        // 初始化零碎
        StudentInfoManageSystem system = new StudentInfoManageSystem();

        // 初始化学生信息
        Student student = new Student(32, "Way Lau", "17088888888", "Shenzhen");

        // 增加学生
        system.addStudent(student); // Add student success

        // 再次增加学生
        system.addStudent(student); // Student exsit

        // 第一次查问所有学生
        List<Student> studentList = system.getStudentList();

        // 删除学生
        system.removeStudent(student); // Remove student success

        // 再次删除学生
        system.removeStudent(student); // Student not exsit

        // 查问所有学生
        studentList = system.getStudentList(); // No student exsit}

}

运行上述程序,能够看到控制台输入内容如下:

Add student success
Student exsit
Student info: name Way Lau, age 32, phone 17088888888, address Shenzhen
Remove student success
Student not exsit
No student exsit

程序语言形容算法一步到位,写出的算法可间接交予计算机解决。对于懂得这类程序语言的开发者而言,通过运行程序能够马上验证算法的正确性。当然其毛病也较为显著:
不便于体现自顶向下、逐渐求解的思维;
程序语言蕴含很多细节内容,会吞没算法的次要思维。
因而,在形容某个算法时,往往通过几种形容形式联合起来应用。


欢送关注「慕课网」官网帐号,咱们会始终保持提供 IT 圈优质内容,分享干货常识,大家一起独特成长吧!

本文原创公布于慕课网,转载请注明出处,谢谢合作

退出移动版