英飞源嵌入式面试题及参考答案
如何在给定的连续内存空间中高效地实现一个队列和一个栈?
栈是一种后进先出(LIFO)的数据结构,要在连续内存空间中实现栈,可以使用一个数组来存储栈元素。定义一个指针来指向栈顶元素,初始时栈为空,指针指向一个特殊值(比如 -1 或者数组的起始位置之前)。当进行入栈操作时,先将指针向上移动一个位置(如果是数组下标,就加 1),然后将元素存储到指针指向的位置。出栈操作则是先取出指针指向位置的元素,然后将指针向下移动一个位置。
例如,用数组 stack [MAX_SIZE] 来表示栈,top 来表示栈顶指针。入栈函数 push 可以这样实现:
void push(int element) {if (top < MAX_SIZE - 1) {top++;stack[top] = element;} else {// 栈满处理,比如打印错误信息printf("Stack is full.\n");}
}
出栈函数 pop 可以这样实现:
int pop() {if (top >= 0) {int