一、数组
二、字符串
三、链表
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
}
链表结构当中,每个对象都包含了下一个链表成员对象的地址,因此可以通过地址偏移遍历链表内的所有内容,或者通过嵌套来遍历所有链表成员。增加链表成员只需要为新节点分配内存,并且调整指针的指向使之加入链表。
四、树
struct BinaryTreeNide
{
int m_nValue;
BinaryTreeNode * m_pLeft;
BinaryTreeNode* m_pRight;
}
前序遍历:1,2,4,5,3,6,7(从根节点触发,从左至右,读完一支再重头读第二支)
中序遍历:4,2,5,1,6,3,7(总是能把结点放在中间,节点左侧是左支,右侧是右支)
后序遍历:4,5,2,6,7,3,1(先读子节点,再读根节点)
常见考点:重建二叉树,二叉树的下一个节点(有右子树则右子树的最左子节点;否则若该节点为父节点的左子节点,则下一个节点就是父节点;若为父节点的右子节点,则往回找直至找到一个节点,这个节点是是其父节点的左子节点,则该节点的父节点就是下一个节点)
五、栈和队列
栈:先进后出
队列:先进先出
例题:用两个栈实现队列
解答:stack1和stack2分别建立,当数据传入时,先压入stack1,传输结束时,将stack1中的数据逐个弹出至stack2,接下来如果进行读取或输入操作,先判断stack2是否为空,若为不空,则从stack2弹出数据或存入stack1而不弹入stack2;若为空,则stack1中的数据弹入stack2,再对stack2进行队列操作。