2018年
1.已知顺序存储机构的线性表L,删除表中元素值等于给定值x的所有元素(表中可能有相同的元素)。
用k记录需要留下的元素的个数,遍历时将不等于x的元素覆盖到下标为k的位置,并更新k的值,最后置表长为k。
//线性表顺序存储结构为:
typedef struct{
ElemType *elem;
int length;
}SqList;
void delete_x(SqList &L,Elemtype x){
int i,k = 0;
for(i = 0; i < L.length;i++){
if(L.data[i] != x){
//不相等的元素,把它放入新表
L.data[k] = L.data[i];
k++;
}
}
L.length = k; //表长置为k
}
2.对给定带头单链表L,将其逆置,即线性表(a1,a2,······,an-1,an)逆置为(an,an-1,······,a2,a1)
将带头结点的单链表L中的元素一一 取出,然后利用头插法原理实现逆置
//链表的存储结构:
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void reverse(LinkList &L) {
LinkList *p;
p=L->next;
L->next=NULL;
for(p; p!=NULL; p=p->next) {
p->next=L->next;
L->next=p;
}
}
3.二叉树T以二叉链表存储,且数值域值互不相同。判断树中数据域值等于给定值x的结点是否为叶子结点。
通过先序遍历,找到数据域值等于x的结点,然后判断其左右孩子是否都为NULL,若是,返回true;否则,返回false。
//其存储结构为:
typedef struct BiTNode{
TElemType data