Однонаправленный список - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вообщем по заданию, мне надо перед указателем поместить элемент, то-есть, если мы имеем список 1 2 *3 4 5, где * указатель на текущий элемент, то после того как я вставил для примера 666, у меня должен получится воот такой уже список 1 2 *666 3 4 5 Ниже приведен когд, когда указатель указывает на первый элемент, тоесть я переприсваиваю самый первый элмент, на котрый у меня всегда остается указатель
temp = (struct list*)malloc(sizeof(list));
temp->value= n;
temp->next=lst;
lst=temp;
pr=lst;
printf("0.Введен %d елемент \n",n);
n++;
Ниже приведен когд, который работает, когда я сместил один раз указатель вправо, тоесть не изменяю "голову" списка
temp = (struct list*)malloc(sizeof(list));
temp->value = n;
temp->next=pr;
pr = temp;
printf("1.Введен %d елемент \n",n);
n++;
break;
Где pr - это указатель коорый я двигаю с помощью
pr=pr->next;
printf("Указатель смещен в право!\n");
и код с помощью которого я все вывожу
for(sp=lst;sp!=NULL;sp=sp->next){
printf("%d ", sp->value);
Проблема в том, что когда указатель указывает на голову, то все вставляется нормально, но как только я сдвинул указатель вправо, то он вроде бы добавляет, но уже не выводит. не подскажите, в чем проблема. Весь код ниже, подскажите пожалуйста(
/* ============================================================================ Name : Lab71.c Author : Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <windows.h> const UINT MEMORY_SIZE = 120 * 1024; typedef struct list { int value; struct Node *next; } list; list *lst, *pr; int j; void printLinkedList(const list *head) { while (head != NULL) { printf("%d ", head->value); head = head->next; } printf("\n"); } int main(void) { int menu, n; n = 1; setlocale(LC_ALL, "Rus"); int e[1000]; HANDLE CurrentProcessHeap = GetProcessHeap(); list *temp, *p, *root, *sp; printf("0.Проверить, список пуст или не пуст\n"); printf("1.добавить элемент\n"); printf("2.Вывести все элементы\n"); printf("22.Вывести элемент за указателем\n"); printf("3.Перевести элемен в начало списка\n"); printf("4.Перевести указатель вправо\n"); printf("5.Добавить элементы\n"); printf("6.Удалить элементы\n"); while (menu != -1) { scanf("%d", &menu); switch (menu) { case 0: { if (lst == NULL) { printf("Список пуст\n"); } else { printf("список не пуст!\n"); } break; } case 1: { if (lst == NULL) { e[0] = HeapAlloc(CurrentProcessHeap, 0, MEMORY_SIZE); lst = (struct list*) malloc(sizeof(struct list)); lst->value = 0; lst->next = NULL; pr = lst; printf("Главный(первый) элемент введен! \n"); j = 1; break; } if (lst != NULL) { if (j != 1) { e[n] = HeapAlloc(CurrentProcessHeap, 0, MEMORY_SIZE); temp = (struct list*) malloc(sizeof(list)); temp->value = n; temp->next = pr; pr = temp; printf("1.Введен %d елемент \n", n); n++; break; } if (j == 1) { e[n] = HeapAlloc(CurrentProcessHeap, 0, MEMORY_SIZE); temp = (struct list*) malloc(sizeof(list)); temp->value = n; temp->next = lst; lst = temp; pr = lst; printf("0.Введен %d елемент \n", n); n++; break; } } } case 2: { sp = lst; //printLinkedList(lst); //printLinkedList(pr); printLinkedList(sp); /*for(sp=pr;sp!=NULL;sp=sp->next){ printf("%d ", sp->value); // вывод значения элемента p } printf("\n");*/ break; } case 22: { printf("%d ", pr->value); // вывод значения элемента p printf("\n"); break; } case 3: { pr = lst; j = 1; break; } case 4: { pr = pr->next; printf("Указатель смещен в право!\n"); j = 0; break; } case 5: { break; } case 6: { list *del; del = pr; pr = pr->next; free(del); del = NULL; break; } } } }

Решение задачи: «Однонаправленный список»

textual
Листинг программы
prpr= pr;
pr = pr->next;

Объяснение кода листинга программы

В данном коде выполняется следующая последовательность действий:

  1. prpr (предположительно, это название переменной) присваивается значение pr (предположительно, это значение переменной).
  2. pr (предположительно, это значение переменной) присваивается значение pr->next (предположительно, это значение свойства или метода переменной pr). Обратите внимание, что без дополнительного контекста и подробностей о том, что представляет собой pr и pr->next, сложно дать более точное объяснение. Кроме того, код представлен всего двумя строками, и трудно определить полную картину происходящего.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы