Programación de estructuras de datos
Un punto y coma menos, ahora está bien
El siguiente es el resultado de mi operación:
Ingrese datos, ¡¡¡deténgase cuando ingrese 0!!!
>1
2
3
4
5
6
7
8
8 1 2 3 4 5 6 7 8
ingrese el valor que desea encontrar:
3
X = 5
Agregue principalmente esta función:
void getPos(Link rear,int Y,struct RTN *rtn)
Y estructura
struct RTN
{
Link Rtnp;
int cnt;
};/ /Se utiliza para almacenar la dirección (Rtnp) y la posición (cnt) del primer nodo a partir del puntero de cola que es el mismo que los datos Y en relación con la posición X del puntero de cola.
Proceso de operación:
Si la lista enlazada circular doble de entrada es 1, 2, 3, 4, 5, 6, 7, 8, 9
Iniciar desde el final de la lista Buscar 5
El valor de retorno es (rtn.Rtnp) que es la dirección del elemento 5 y la posición final relativa de la tabla (rtn.cnt) es 4.
Porque 8 7 6 5 es exactamente 4 posiciones
Si no se encuentra, el valor de retorno (rtn.Rtnp) es un puntero nulo y la posición (rtn.cnt) es 0.
#include typedef int Elemtype; typedef struct node /*definición de tipo de estructura*/ { Datos de tipo de elemento; nodo de estructura *siguiente; nodo de estructura *pre }*Enlace,LNodo; struct RTN { p> Enlace Rtnp; int cnt; }; Enlace ha; Enlace inilink(Enlace encabezado) { head=(Link)malloc(sizeof(LNode)); encabezado- >pre=cabeza; cabeza ->siguiente=cabeza return(cabeza); } void getPos(Enlace rear,int Y,struct RTN *rtn) { Temp del enlace = NULL; int count = 0; if (trasero->datos != Y) temp = trasero->pre; else { rtn->Rtnp = trasero; rtn-> cnt = 0; return ; } while((temp != trasero)) { if(temp->data != Y) { recuento = recuento + 1; temp = temp->pre; } else { recuento = recuento + 1; rtn->Rtnp = temp; p> rtn->cnt = recuento; retorno ; } } rtn->Rtnp = NULL ; rtn->cnt = 0; retorno ; } void setlink(Encabezado de enlace) { /*(usando el método de post-interpolación) para crear una lista enlazada individualmente*/ int y,i=0; p; printf("Ingrese datos, cuando ingrese, ¡¡¡Deténgase en 0!!!\n"); p=head scanf("% d",&y); while(y! =0) { q=(Enlace)malloc(sizeof(LNode )); q->data=y; q->next=head; head->pre=q; q->pre=p; p->siguiente=q; p=q i++; scanf("%d",&y); } head->data=i; } void printlink( Cabezal de enlace) { /*Salida de lista lineal enlazada individualmente*/ Enlace p; int i=0; p = cabeza; for(;p!=NULL&&i<=cabeza->datos;i++, p=p->siguiente) printf("%6d",p-> datos ); printf("\n"); } main() /*programa principal*/ { int k =0; int X,Y; estructura RTN rtn; rtn.Rtnp = NULL; p > rtn.cnt = 0; ha=inilink(ha); setlink(ha); printlink(ha); /p> p> printf("\n"); printf("ingrese el valor que desea encontrar:\n"); %d" ,&Y); getPos(ha->pre,Y,&rtn); if(rtn.Rtnp!=NULL) { X = rtn.cnt; printf("X = %d \n",X } else); { printf("¡no encuentro Y!\n"); } getch(); }