Tengo un problema con C++ que me está dando dolor de cabeza. A continuación se muestra una versión del mismo. Espero que puedas ayudarme.
La operación fue exitosa, pero tenga en cuenta que las listas de entrada La y Lb deben ser entradas no decrecientes; de lo contrario, se producirá un error. El autor puede modificar ListInsert y optimizarlo aún más, de modo que independientemente de si se ingresa de manera no decreciente, se almacenará automáticamente en la lista de manera no decreciente, porque su función solo se inserta en una posición específica. No incluye clasificación por inserción, no lo modifiqué. Si lo desea, puede cambiarlo directamente de la siguiente manera
int Linsert(LinkList&L,ElemType e)
{
Link temp,h,p, q;
int i=0;
temp=(Enlace)malloc( tamañode(nodo));
temp->data=e;
p>temp->siguiente=NULL;
h=GetHead(L);
if (h->siguiente==NULL)
{
h->next=temp;
L.tail=temp;
L.len=1;
}
else
{
p=h->siguiente;
q=h;
mientras (p&&p -& gt; datos { q=p; p=p->siguiente; } if(p==NULL) { L.tail->next=temp; L.tail= temp; L.len++; } else { temp->next=p; q->next=temp; L.len++; } } } p> return OK; }Use esta función para reemplazar directamente la función original, o no reemplazar la función original, porque la función original es una función sobrecargada seleccionada automáticamente en función de los parámetros de entrada. #include "stdafx.h" #include #include # define ElemType int #define NULL 0 typedef enum{OK,ERROR}Estado; // typedef struct node { Datos ElemType; estructura nodo *siguiente; }*Enlace,* Posición; estructura typedef { Enlace cabecera,cola; int len; }Lista de enlaces; Enlace GetHead(Lista de enlaces h) p> { Enlace q; q = h.head; return(q); } Estado ListaInicio(ListaEnlaces &L) { Enlace q; q = L.tail= L.head = (Enlace) malloc(sizeof(node)); q->next = NULL; L.len = 0; Devolver OK; } int ListInsert(LinkList &L,int i,ElemType e) { Enlace s, p; int j; p = GetHead(L);j = 0; while(p&j { p = p->siguiente; { p = p->siguiente; ++j; } if(!p||j>i -1)ERROR de retorno; s = (Enlace)malloc(tamañode(nodo)); s->datos = e; s-> siguiente = p-> siguiente; p->siguiente = s; L.tail = s;//////////////// //// return OK; } visualización nula (LinkList L) { Enlace q,m; q = GetHead(L); m = q->siguiente; while(m! =NULL) { printf("%d",m->datos); m = m->siguiente; } printf("\n"); } Enlace NextPos(LinkList L,Link p) { Enlace q; if(p == L. tail) if(p == L.tail) q = NULL; más q = (p->siguiente); > return (q); } ElemType GetCurElem(Enlace p) { ElemType q; q = p->datos; retorno (q); } Estado DelFirst(Enlace h,Enlace & q ) { ////////////////////////// Enlace p; p = h->siguiente;< q = p; h->siguiente = p->siguiente; devolver OK; p > } void Append(LinkList &L,Link s) { L.tail-> next = s; L.tail=s;/////////////////// } Estado MergeList(LinkList &La,LinkList &Lb, LinkList &Lc) { Enlace ha,hb,pa,pb,q; ElemType a,b; ha = GetHead(La); hb = GetHead(Lb); pa = NextPos (La ,ja); pb = NextPos(Lb,hb); while(pa&&pb) { a = GetCurElem(pa); b = GetCurElem(pb); if(comp(a,b)>=0) { p> DelFirst(ha,q); Append(Lc,q); pa = NextPos(La,ha); } else { DelFirst(hb,q); Append(Lc,q); pb = NextPos(Lb ,hb); } if(pa) Lc.tail->next=pa;////////////// / En caso contrario Lc.tail->next=pb;///////////// free(ha); free(hb); return OK; } int comp(ElemType a,ElemType b) { int m; if(a>b) m = a; else m = b; return(m); p> } } void main() { int n,i; LinkList La, Lb, Lc;//////////////////////////// ElemType temp; InitList(La); printf ("Ingrese el número o f datos en la tabla la:\n"); scanf("%d",&n ); printf("Ingrese el número de datos en la tabla la:\ n"); for(i=1;i<=n;i++) { scanf("%d",&temp); ListInsert(La,i,temp); } InitList(Lb); printf("Ingrese el número de datos en la tabla lb); :\n"); scanf("%d",&n); printf("Por favor, introduzca los datos en la tabla lb:\n"); for(i=1;i&& lt;=n;i++) { scanf("%d",&temp); ListInsert (Lb,i,temp); } InitList(Lc); MergeList(La,Lb,Lc) ;////// /////////// mostrar(Lc);///////////////// } p >