数据结构-简答题1

1、现要存储100个学生的信息,每个学生的基本信息包括学号、姓名、性别、出生日期、专业,其中王明的学号为2015150001,性别为男,出生日期为1997-01-01,专业为财务管理。请完成以下任务:

(1)王明的信息中哪些是数据,哪些是数据项?数据对象和数据结构又可以在哪里体现?

(2)请用类设计合理的数据结构,并录入、输出王明的基本信息。

(3)现因为数据录入遗漏,需要将每个学生的学号都做“+1”的处理。请在类中添加函数实现这一功能。

答:

(1)王明的所有信息都是数据,而学号、姓名、性别、出生日期、专业数据项。数据对象是若干个学生信息组成的集合,这个集合中学生信息和学生信息之间的关系以及数据操作结合即为数据结构。

(2)

#include 
using namespace std;

class Student
{
public:
    int SID;
    char *name;
    char gender;
    char *birthday;
    char *major;

    void print()
    {
        cout << "学号为:" << SID << ' ';
        cout << "姓名为:" << name << ' ';
        cout << "性别为:" << gender << ' ';
        cout << "出生日期为:" << birthday << ' ';
        cout << "专业为:" << major << endl;
    }
};

int main()
{
    Student s;
    s.SID = 2015150001;
    s.name = "王明";
    s.gender = 'M';
    s.birthday = "1997-01-01";
    s.major = "财务管理";
    s.print();

    system("pause");
    return 0;
}

(3)

void inceaseSID(Student students[], int num)
{
    for (int i = 0; i < num; i++)
        students[i].SID++;
}

2、下面的程序段中,语句“a=a+1;”共执行了多少次?

for (i = 1; i <= n; i++)

       for (j = 1; j <= i; j++)

           for (k = 1; k <= j; k++)

               a = a + 1;  

答:第一条语句循环了n次,第二条语句在每个循环内分别执行了执行了1、2、3、……、n次共(1+n)n/2次,第三条语句也在第二层循环中和语句中执行了1、3、6、……、(1+n)n/2次,共n(n+1)(n+2)/6次。

3、若某线性表最常用的操作是存取任一指定序号的元素和在表尾进行插入和删除操作,则采用何种存储结构最节省时间?

答:顺序存储结构最方便。以数组a[n]为例说明。 对于任何链表,想要存取序号为i的元素都需要从头结点开始遍历结点,直到找到i结点为止,而顺序表只需要指定a[i-1]进行操作即可。 而在对表尾进行操作时,单链表和循环链表需要从头结点一直遍历到最后一个结点,双向链表可以从尾结点的prior指针操作数据,而顺序表只需要指定a[n-1]进行操作即可。

4、给定一个链表,如何快速判断其中是否存在环路?

答:使用 Floyd判圈算法。通过使用两个指针fast和slow遍历链表,fast指针每次走两步,slow指针每次走一步,如果fast和slow相遇,则表示存在环,否则不存在环

5、请给出算法思路:有两个“非递减有序”的线性表数组,将它们合并成一个“非递减有序的“的线性表数组,例如,将 arr1[] = { 1, 3, 4, 5}, arr2[] = {2, 4, 6, 8},合并为arr3[] = {1, 2, 3, 4, 4, 5, 6, 8}。

答:创建一个arr3数组,大小为arr1和arr2的大小之和,同时遍历arr1和arr2,每次比较结果较小的元素插入arr3,剩余的arr1或arr2元素再复制到arr3中。时间复杂度为O(n1+n2)。

6、说明线性表、栈与队列的异同点。

答:

相同点:都是线性结构,都是逻辑结构的概念,都可以用顺序存储或链表存储,但栈和队列是两种特殊的线性表,对插入、删除运算加以限制。

不同点:运算规则不同,线性表为随机存取,而栈是只允许在栈顶进行插入、删除运算,是后进先出表;队列是只允许在队尾进行插入、队头进行删除运算,是先进先出表。

7、设编号为1,2,3,4,5的五列火车,顺序进入一个栈式结构的车站,写出这五列火车开出车站的所有可能的顺序。

答:

一共42种: 全进之后再出情况,只有1种:5 4 3 2 1 ;

进4个之后再出的情况,有4种:4 3 2 1 5;4 3 2 5 1;4 3 5 2 1;4 5 3 2 1;

进3个之后再出的情况,有9种:3 4 5 2 1;3 5 4 2 1;3 2 4 5 1;3 2 5 4 1;3 2 1 4 5;3 2 1 5 4;3 4 2 1 5;3 4 2 5 1;3 2 4 1 5;

进2个之后再出的情况,有14种:2 1 3 4 5;2 1 3 5 4;2 1 4 5 3; 2 1 4 3 5;2 1 5 4 3;2 3 4 5 1;2 3 5 4 1;2 4 5 3 1;2 4 3 5 1;2 5 4 3 1;2 3 1 4 5;2 3 4 1 5;2 3 1 5 4;2 4 3 1 5;

进1个之后再出的情况,有14种:1 5 4 3 2;1 4 5 3 2;1 4 3 5 2; 1 4 3 2 5;1 3 5 4 2;1 3 4 5 2;1 3 2 4 5;1 3 2 5 4;1 3 4 2 5;1 2 5 4 3;1 2 4 3 5;1 2 4 5 3;1 2 3 4 5;1 2 3 5 4。

8、简述空串与空格串、主串与子串、串名与串值、目标串与模式串中每对术语的区别。

答:

空串与空格串:空串是指字符串中的字符皆为空,即NULL,空格串是指字符串中的字符皆为空格即‘ ’;

主串与子串:子串是主串中任意个连续的字符组成的子序列;

串名与串值:串名是字符串声明时的命名,串值是字符串的字符集合

目标串与模式串:在进行字符串的模式匹配运算时,待查找的字符串为目标串,给定的待匹配的子串为模式串

9、一棵度为2的树与一棵二叉树有什么区别?

答:度为2的树是不区分左子树和右子树,而二叉树是要分左子树和右子树的。度为2的树不包含空树,而二叉树是可以有空树的。

10、为便于存储和处理一般树结构形式的信息,常采用孩子-兄弟表示法将其转换成二叉树(左子关系表示父子、右子关系表示兄弟),请画出下图对应的二叉树。

数据结构-简答题1_第1张图片

答:

数据结构-简答题1_第2张图片

你可能感兴趣的:(数据结构,数据结构,算法)