|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 6
|
URGENTE: lista concatenata in C
Ciao a tutti ragazzi, è un bel po' che sto sbattendo per la realizzazione di una lista in C. Innanzitutto nn ho ben capito come funziona e vi sarei grato se qualkuno potesse postarmi un codice esempio, ma cmq anche copiando il codice di una lista che viene proposta sul libro Deitel e Deitel C Corso di prog. il mio compilatore da errore. Uso dev c versione 4 e vi posto il codice:
#include <stdio.h> #include <stdlib.h> struct listNode{ char data; struct listNode *nextPtr; }; typedef struct listNode ListNode; typedef ListNode *ListNodePtr; void insert(ListNodePtr*sPtr, char value); int isEmpty(ListNodePtr sPtr); void printList(ListNodePtr currentPtr); void instructions(void); int main() { ListNodePtr startPtr=NULL; int choice; char item; instructions(); printf("? "); scanf("%d",&choice); while(choice!=3){ switch(choice){ case 1: printf("Enter a characther:"); scanf("\n%c",&item); insert(&startPtr,item); printList(startPtr); break; default: printf("invalid choice.\n\n"); instructions(); break; } printf("?"); scanf("%d", &choice); } printf("End of run.\n"); return 0; } void instructions(void) { printf("Enter your choice:\n" " 1 to insert an element into the list.\n" " 2 to delete an element from the list.\n" " 3 to end.\n"); } void insert(ListNodePtr *sPtr, char value) { ListNodePtr newPtr; ListNodePtr previousPtr; ListNodePtr currentPtr; newPtr=malloc(sizeof(ListNode)); if(newPtr!=NULL){ newPtr->data=value; newPtr->nextPtr=NULL; previousPtr=NULL; currentPtr=*sPtr; while(currentPtr!=NULL && value>currentPtr->data){ previousPtr=currentPtr; currentPtr=currentPtr->nextPtr; } if(previousPtr==NULL){ newPtr->nextPtr=*sPtr; *sPtr=newPtr; } else{ previousPtr->nextPtr=newPtr; newPtr->nextPtr=currentPtr; } } else{ printf("%c not inserted.No memory available.\n",value); } } void printList(ListNodePtr currentPtr); { if(currentPtr==NULL){ printf("List is Empty.\n\n"); } else{ printf("The list is:\n"); while (currentPtr!=NULL){ printf("%c-->",currentPtr->data); currentPtr=currentPtr->nextPtr; } printf("NULL\n\n"); } } mi da i seguenti errori: Compilatore: Default compiler Esecuzione di g++.exe... g++.exe "D:\Uniroma\Programmazione 1\lista.cpp" -o "D:\Uniroma\Programmazione 1\lista.exe" -I"C:\Dev-Cpp\include\c++" -I"C:\Dev-Cpp\include\c++\mingw32" -I"C:\Dev-Cpp\include\c++\backward" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" D:/Uniroma/Programmazione 1/lista.cpp: In function `void insert(ListNode**, char)': D:/Uniroma/Programmazione 1/lista.cpp:68: invalid conversion from `void*' to ` ListNode*' D:/Uniroma/Programmazione 1/lista.cpp: At global scope: D:/Uniroma/Programmazione 1/lista.cpp:99: parse error before `{' token D:/Uniroma/Programmazione 1/lista.cpp:108: ISO C++ forbids declaration of ` currentPtr' with no type D:/Uniroma/Programmazione 1/lista.cpp:108: base operand of `->' is not a pointer D:/Uniroma/Programmazione 1/lista.cpp:109: parse error before `}' token D:/Uniroma/Programmazione 1/lista.cpp:110: ISO C++ forbids declaration of ` printf' with no type D:/Uniroma/Programmazione 1/lista.cpp:110: `int printf' redeclared as different kind of symbol C:/Dev-Cpp/include/stdio.h:213: previous declaration of `int printf(const char*, ...)' D:/Uniroma/Programmazione 1/lista.cpp:110: invalid conversion from `const char* ' to `int' D:/Uniroma/Programmazione 1/lista.cpp:111: parse error before `}' token Esecuzione terminata Ultima modifica di alexsimone : 31-01-2007 alle 11:33. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Ricontrolla quello che hai copiato, vedo diversi errori che non credo tu possa trovare stampati su un libro
__________________
Il sole è giallo |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 6
|
Si , c'era un = in meno in un controllo nella funzione printList ma ora ho corretto e cmq mi da sempre errore
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Codice:
void printList(ListNodePtr currentPtr);
{
....
Il resto è giusto e il programma parte, perlomeno compilato col cl Microzozz
__________________
Il sole è giallo |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 6
|
mi da sempre errore
Compilatore: Default compiler Esecuzione di g++.exe... g++.exe "D:\Uniroma\Programmazione 1\lista.cpp" -o "D:\Uniroma\Programmazione 1\lista.exe" -I"C:\Dev-Cpp\include\c++" -I"C:\Dev-Cpp\include\c++\mingw32" -I"C:\Dev-Cpp\include\c++\backward" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" D:/Uniroma/Programmazione 1/lista.cpp: In function `void insert(ListNode**, char)': D:/Uniroma/Programmazione 1/lista.cpp:68: invalid conversion from `void*' to ` ListNode*' Esecuzione terminata |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Uhm, il cl non lo segnala, comunque suppongo che l'errore sia nel mancato cast sulla malloc
Codice:
newPtr=(ListNode*)malloc(sizeof(ListNode));
__________________
Il sole è giallo |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 6
|
si ora funziona grazie del tuo prezioso aiuto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:30.



















