科目 | 内容 | 补充 | 时间 |
---|---|---|---|
数学 | 第一章结束 |
介值定理、零点定理、最值定理的证明。通过所证结论构造函数,根据新函数的连续的区间,带入两端点所得函数判断。
3.设L为带头结点的单链表,编写算法实现从尾到头反向输出每个节点的值
void output_R(LinkList &L)
{
if (L == NULL)//合法性判断
return;//跳出
if(L!=NULL)
output_R(L->next);
printf("%d", L->data);
}
4.试编写在带头结点的单链表L中删除一个最小值节点的高效算法(假设最小值节点是唯一的)
#include <malloc.h>
#include <stddef.h>
#include <stdio.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
bool InitList(LinkList &L)
{
L = NULL;
return true;
}
LinkList List_TailInsert(LinkList &L)
{
int x;
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
LNode *s, *r = L;
scanf("%d", &x);
while (x != 9999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
void printlist(LinkList L)
{
LNode *t;
t = L->next;
while (t != NULL)
{
printf("%d", t->data);
t = t->next;
}
}
bool Delete_min(LinkList &L)
{
int x = 0;
LNode *p, *pre, *q;
p = L->next;
q = L;
pre = L;
if (L == NULL)
return false;
x = p->data;
while (p != NULL)
{
if (x > p->data)
{
x = p->data;
pre = q;
}
p = p->next;
q = q->next;
}
q = pre->next;
pre->next = q->next;
free(q);
return true;
}
int main(void)
{
LNode *L;
InitList(L);
printf("shuruzifu:");
List_TailInsert(L);
printlist(L);
printf("First one word is %d", L->next->data);
printf("________");
Delete_min(L);
printlist(L);
return 0;
}
试编写算法将带头结点的单链表就地逆置,所谓“就地”就是空间复杂度为 O ( 1 ) O(1) O(1)
#include <malloc.h>
#include <stddef.h>
#include <stdio.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
bool InitList(LinkList &L)
{
L = NULL;
return true;
}
LinkList List_TailInsert(LinkList &L)
{
int x;
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
LNode *s, *r = L;
scanf("%d", &x);
while (x != 9999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
void printlist(LinkList L)
{
LNode *t;
t = L->next;
while (t != NULL)
{
printf("%d", t->data);
t = t->next;
}
}
bool reverse(LinkList &L)
{
if (L == NULL)
return false;
LNode *p, *q;
p = L->next;
q = p;
L->next = NULL;
while (p != NULL)
{
q = q->next;
p->next = L->next;
L->next = p;
p=q;
}
return true;
}
int main(void)
{
LNode *L;
InitList(L);
printf("shuruzifu:");
List_TailInsert(L);
printlist(L);
printf("First one word is %d\n", L->next->data);
printf("________\n");
reverse(L);
printlist(L);
return 0;
}