Según información confiable, las preguntas de diseño de algoritmos se centran principalmente en:
Capítulos 2, 3, 7, 8
Respectivamente son
-
Capítulo 2 Tabla lineal
-
Capítulo 3 Pilas y colas
-
Capítulo 7 Búsqueda
-
Capítulo 8 Clasificación
principal
Cree una lista enlazada individualmente insertando antes y después de la inserción, y combínela en una lista enlazada ordenada
Problemas de diseño de algoritmos de ejercicios extraescolares de tablas lineales 1, 7
Empuje y haga estallar la pila de cadenas
Equipo de cadena
Encontrar por la mitad
Ordenamiento de burbuja
Ordenación rápida
Tipo de pila
Cree una lista enlazada individualmente insertando antes y después de la inserción, y combínela en una lista enlazada ordenada
Descripción del código:
void CreateList_H(LinkList& L, int n)
{
L = new Lnode;
L->next = NULL;
for (int i = 0; i < n; ++i) {
p = new Lnode;
cin >> p->data;
p->next = L->next;
L->next = p;
}
}
La complejidad del tiempo del algoritmo es O (n).
void CreateList_R(LinkList& L, int n) {
L = new Lnode;
L->next = NULL;
r = L;
for (i = 0; i < n; ++i) {
p = new Lnode;
cin >> p->data;
p->next = null;
r->next = p;
r = p;
}
}
La complejidad del tiempo del algoritmo es O (n).
void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc)
{
pa = La->next; pb = Lb->next;
Lc = pc = La; //用La的头结点作为Lc的头结点
while (pa && pb)
{
if (pa->data < pb->data) {
pc->next = pa; pc = pa; pa = pa->next; }
//取较小者La中的元素,将pa链接在pc的后面,pa指针后移
else if (pa->data > pb->data) {
pc->next = pb; pc = pb; pb = pb->next; }
//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移
else //相等时取La中的元素,删除Lb中的元素
{
pc->next = pa; pc = pa; pa = pa->next;
q = pb->next; delete pb; pb = q;
}
}
pc->next = pa ? pa : pb; //插入剩余段
delete Lb; //释放Lb的头结点
}
Problemas de diseño de algoritmos de ejercicios extraescolares de tablas lineales 1, 7
2. Problemas de diseño del algoritmo P53 (1) (7)
(1) Combine dos listas vinculadas ordenadas en aumento en una lista vinculada ordenada en aumento. Es necesario que la lista vinculada de resultados siga utilizando el espacio de almacenamiento de las dos listas vinculadas originales y no ocupe otro espacio de almacenamiento. No se permiten datos duplicados en la tabla.
¡lo mismo de arriba! ! !
(7) Diseñe un algoritmo para invertir la dirección de enlace de todos los nodos en la lista enlazada "in situ", es decir, solo se requiere el espacio de almacenamiento de la tabla original. En otras palabras, la complejidad espacial del algoritmo es 0 (1).
//利用的是前插法
void Do(LinkList& L) {
//1->2->3->4
r = L->next;
L->next = NULL;
while (r) {
p = r->next;
r->next = L->next;
L->next = r;
r = p;
}
}
Empuje y haga estallar la pila de cadenas
void Push(LinkStack& L, SElemType e) {
p = new StackNode;
p->data = e;
p->next = L;
L = p;
}
void pop(LinkStack& L, SElemType e) {
if (L == NULL)e = NULL;
else
{
p = L;
e = L->data;
L = L->next;
delete p;
}
}
Encontrar por la mitad
int search_bin(SStable ST,keyType key){
low =1;
hight = ST.length;
while(low<=high
{
mid = (low + high)/2;
if(key == ST.R[mid].key)
return mid;
else if (key<ST.R[mid].key)
high = mid-1
else low = mid +1
}
return 0;
Ordenamiento de burbuja
void BubbleSort(Sqlist &L)
{
m = L.length - 1 ;
flag = 1;
while ((m>0)&&(flag==1))
{
flage = 0;
for (j=1;j<=m;j++){
if(L.r[j].key>L.r[j+1].key)
{
flag = 1;
t = L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1] = t;
}
--m;
}
}
}
Suponiendo que la cola está representada por una lista circular vinculada con el nodo principal, y solo un puntero está configurado para apuntar al nodo del elemento final de la cola (nota: no se establece ningún puntero principal), intente escribir la cola vacía correspondiente, juzgue si la cola está vacía, ingrese y retire de la cola Y otros algoritmos
Existe una famosa "función de Ackermann (Ackermann)" en matemáticas, que se define de la siguiente manera:
(1) Escriba el algoritmo recursivo de Ack (m, n)
int Ack(int m, int n)
//Ack函数的递归算法
{
If(m==0)
return n+1;
else if (m!=0 && n==0)
return Ack(m-1, 1);
Else
return Ack(m-1,Ack(m,m-1));
}
(2) Escriba un algoritmo no recursivo para calcular Ack (m, n)
int Ack(int m, int n)
//Ack函数的递归算法
{
for(j=0;j<n;j++)
akm[0][j] = j+1;//得到Ack(0,n)的值
for(i=0;i<m;i++)
{
akm[i][0] = akm[i-1][1];
for(j=1;j<n;j++)
akm[i][j] = akm[i-1][akm[i][j-1]];
}
return akm[m][n];
}