Удалить все элементы списка. Не работает delete - C (СИ)
Формулировка задачи:
Нужно удалить все элементы односвязанного списка и пришло вот такое решение:
но проблема в том, что функция delete не работает и выкидывает программу. Что делать и почему так происходит? P.S. free работает так же
... void dall(LISTNODEPTR startPtr) { if (startPtr!=NULL) { dall(startPtr->nextPtr); delete (startPtr); } } ...
Решение задачи: «Удалить все элементы списка. Не работает delete»
textual
Листинг программы
// laba_3.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <malloc.h> #include<locale.h> struct listNode { /* структура со ссылкой на себя */ char nos; int siz; char name; char art; struct listNode *nextPtr; }; typedef struct listNode LISTNODE; typedef LISTNODE *LISTNODEPTR; void insert (LISTNODEPTR *, char); char dele(LISTNODEPTR, char); int isEmpty(LISTNODEPTR); void printList(LISTNODEPTR); void instructions(void); char deldoub(LISTNODEPTR); int nn(LISTNODEPTR ); char refur(LISTNODEPTR); void dall(LISTNODEPTR); int main () { setlocale(LC_ALL, "Russian"); printf("\n\t\t Лабораторная №3, вариант 10 \n\t\t============================= \n"); LISTNODEPTR startPtr = NULL; int choice; char item; instructions(); printf ("Делать: "); scanf("%d", &choice); while (choice !=3) { switch (choice) { case 1: printf("Значение: "); scanf("\n%c", &item); insert(&startPtr, item); printList(startPtr); break; case 2: { printf ("Удалить: "); scanf ("\n%c", &item); if (dele(startPtr, item)==1) { printf("%c уделён \n", item); printList(startPtr); } else printf("%c нет в списке\n\n",item); } break; case 7: {dall(startPtr); printList(startPtr); } case 6: { refur(startPtr); printList(startPtr); break; } case 4: { deldoub(startPtr); printList(startPtr); break; } default: case 5: { nn(startPtr); break; } printf("Плохой выбор. \n\n"); instructions (); break; } printf ("\nДелать: "); scanf("%d", &choice); } printf("Энд\n"); return 0; } void instructions(void) { printf ("1-Записать в список\n2-Удалить элемент\n3-Выход\n4-Удалить повторяющиеся элементы\n5-Определить количество элементов\n"); } void insert(LISTNODEPTR *sPtr, char value) { LISTNODEPTR newPtr, previousPtr, currentPtr,endPtr; newPtr=(LISTNODEPTR)(malloc (sizeof (LISTNODEPTR))); if (newPtr != NULL) { newPtr->nos = value; newPtr->nextPtr = NULL; endPtr=newPtr; previousPtr = NULL; currentPtr = *sPtr; while (currentPtr != NULL && value >currentPtr->nos) { 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); } char dele(LISTNODEPTR startPtr, char value) { LISTNODEPTR previousPtr, tempPtr,nextPtr,endPtr,currentPtr; currentPtr=startPtr; tempPtr=startPtr; for(tempPtr=startPtr; tempPtr!=NULL; tempPtr=tempPtr->nextPtr) { for(currentPtr=currentPtr->nextPtr; currentPtr!=NULL; currentPtr=currentPtr->nextPtr) { if(value==currentPtr->nos) { tempPtr->nextPtr=currentPtr->nextPtr; currentPtr=NULL; break; } } currentPtr=tempPtr->nextPtr; } return 1; } char deldoub(LISTNODEPTR startPtr) { LISTNODEPTR previousPtr, tempPtr,nextPtr,endPtr,currentPtr; currentPtr=startPtr; tempPtr=startPtr; for(tempPtr=startPtr; tempPtr!=NULL; tempPtr=tempPtr->nextPtr) { for(currentPtr=currentPtr->nextPtr; currentPtr!=NULL; currentPtr=currentPtr->nextPtr) { if(tempPtr->nos==currentPtr->nos) { tempPtr->nextPtr=currentPtr->nextPtr; currentPtr=NULL; break; } } currentPtr=tempPtr->nextPtr; } return '\0'; } int nn(LISTNODEPTR startPtr) { LISTNODEPTR nextPtr; int nn; for (nn=0;startPtr!=NULL; startPtr=startPtr->nextPtr) nn++; printf("В списке %d элементов",nn); return nn; } int isEmpty(LISTNODEPTR sPtr) { return sPtr == NULL; //1 -pusto } void printList(LISTNODEPTR currentPtr) { if (currentPtr == NULL) printf("Слишком пусто\n\n"); else { printf("Список\n"); while (currentPtr != NULL) { printf("%c-> ", currentPtr->nos); currentPtr = currentPtr->nextPtr; } printf ("NULL\n\n"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д