C/C++程序员面试宝典(三)


1、线性表的实现方式:
顺序实现:用一组地址连续的存储单元依次存储线性表的数据元素。(需要预先分配表的大小,适用于随机存取元素,按位置访问时间复杂度为O(1) )
链表实现:用一组任意的存储单元存储线性表的数据元素。(需要存储额外的信息以实现表的逻辑关系,适用于随机插入或删除元素)

2、链表:单链表、双向链表、循环链表

队列
3、循环队列判断是否已满:

bool isFull = ((rear+1)%MaxSize == front) ? 1 : 0; 


4、括号匹配问题
输入:给定一个字符串,里边可能包含“()”、“[]”、“{}”三种括号,请编写程序检查该字符串中的括号是否成对出现,且嵌套关系正确。
输出:
true:若括号成对出现且嵌套关系正确,或该字符串中无括号字符;
false:若未正确使用括号字符。

#include<iostream>
#include<stack>
#include<string>
using namespace std;

bool Judge(string str) {  //使用栈判断括号匹配
	stack<char> s;
	for(int i = 0; i < str.length(); i++) {
		switch (str[i]) {
			case '(': //遇到左括号,将左括号入栈
				s.push('(');
				break;
			case '[':
				s.push('[');
				break;
			case '{':
				s.push('{');
				break;

			case ')': //遇到右括号,判断栈顶是否是匹配的左括号,若是,出栈,若不是,返回false
				if (s.top() == '(') {
					s.pop();
				}
				else {
					return false;
				}
				break;
			case ']':
				if (s.top() == '[') {
					s.pop();
				}
				else {
					return false;
				}
				break;
			case '}':
				if (s.top() == '{') {
					s.pop();
				}
				else {
					return false;
				}
				break;
			}
	}
	if (s.empty()) {
		return true; //当所有的元素出栈后,s为空说明是匹配的
	}
	else {
		return false;
	}
}

int main() {
	string str;
	while (cin >> str) {
		cout << Judge(str) << endl;
	}

	return 0;
}


5、树的遍历:深度优先遍历、广度优先遍历

6、二叉树:
a.包含n个结点的二叉树边数为n-1
b.若二叉树的高度为h,则最少有h个元素,最多有2^h-1个元素
c.包含n个元素的二叉树的高度最大为n,最小为log2(n+1)
d.若完全二叉树(对应满二叉树)右n个结点,其中一元素的序号为i,则当i=1时,该元素为二叉树的根;当2i>n时,该元素无左孩子,否则,其左孩子编号为2i;当2i+1>n时,该元素无右孩子,否则,其右孩子编号为2i+1。(注意i从1开始)

7、二叉树的遍历(递归)
a.前序遍历

template<class T>
void PreOrder(BinaryTreeNode<T> t){
	if(t){
		visit(t);
		PreOrder(t->LeftChild);
		PreOrder(t->RightChild);
	}
}

b.中序遍历

template<class T>
void PreOrder(BinaryTreeNode<T> t){
	if(t){
		PreOrder(t->LeftChild);
		visit(t);
		PreOrder(t->RightChild);
	}
}

c.后序遍历

template<class T>
void PreOrder(BinaryTreeNode<T> t){
	if(t){
		PreOrder(t->LeftChild);
		PreOrder(t->RightChild);
		visit(t);
	}
}

8、二叉树的高度 = Max(左子树高度,右子树高度)+1

int height(Node *root)
{
    if( root == NULL ) return 0; //注意递归的出口,不写就死递归了
    int l = height( root->left );
    int r = height( root->right );

    return l > r ? l+1 : r+1;
}

9、图的实现方式:
邻接矩阵
在这里插入图片描述
邻接表
在这里插入图片描述
10、图的搜索方式:广度优先搜索和深度优先搜索

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值