1、一组整数以顺序结构存储,设计将所有偶数元素移到所有奇数元素之前的算法
//顺序表结构
typedef struct list{
int data[MAXSIZE];
int len = 0;
}*SList;
//算法实现
void sortNumber(SList &list){
int data[MAXSIZE];
int i = 0;
int j = list->len-1;
for(int k=0;k<list->len;k++){
if(list->data[k]%2==0){
data[i] = list->data[k];
i++;
}else{
data[j] = list->data[k];
j--;
}
}
for(int k=0;k<list->len;k++){
list->data[k] = data[k];
}
}
//时间复杂度分析:O(n)
//空间复杂度分析:O(n)
2、二叉树采用二叉链表存储结构,设计交换二叉树中所有结点左右子树的算法。
//二叉树链式结构
typedef struct Tree{
int data;
struct Tree* left;
struct Tree* right;
}Tree,*BiTree;
//算法实现
void swapLeftToRight(BiTree &tree){
if(tree == NULL){
return;
}
swapLeftToRight(tree->left);
swapLeftToRight(tree->right);
BiTree temp;
temp = tree->left;
tree->left = tree->right;
tree->right = temp;
}
3、设计在顺序存储的有序表中实现二分查找的算法。
//顺序表结构
typedef struct list{
int data[MAXSIZE];
int len = 0;
}*SList;
//代码实现
int find(SList list,int left,int right,int key){
if(left>right){
return -1;
}
int mid = (left+right)/2;
if(list->data[mid] > key){
find(list,left,mid-1,key);
}else if(list->data[mid] == key){
return mid;
}else{
find(list,mid+1,right,key);
}
}
4、n个元素采用顺序存储,设计直接插入排序算法。
//顺序表结构
typedef struct list{
int data[MAXSIZE];
int len = 0;
}*SList;
//算法实现
void insertSort(SList &list){
for(int i=2;i<list->len;i++){
if(list->data[i] < list->data[i-1]){
list->data[0] = list->data[i];
int temp = list->data[0];
int j;
for(j=i-1;list->data[j]>temp;j--){
list->data[j+1] = list->data[j];
}
list->data[j+1] = temp;
}
}
}
5、二叉树采用二叉链表存储结构,设计二叉树先序遍历的非递归算法。
//二叉树链式结构
typedef struct Tree{
int data;
struct Tree* left;
struct Tree* right;
}Tree,*BiTree;
//算法实现
void firstNoRecursion(BiTree tree){
int maxSize = 50;
BiTree stack[maxSize];
int top = -1;
top++;
stack[top] = tree;
while(top != -1){
tree = stack[top];
top--;
//一些访问节点的其它操作
if(tree->right != NULL){
top++;
stack[top] = tree->right;
}
if(tree->left != NULL){
top++;
stack[top] = tree->left;
}
}
}