Однонаправленный список - C (СИ)
Формулировка задачи:
Вообщем по заданию, мне надо перед указателем поместить элемент, то-есть, если мы имеем список 1 2 *3 4 5, где * указатель на текущий элемент, то после того как я вставил для примера 666, у меня должен получится воот такой уже список 1 2 *666 3 4 5 Ниже приведен когд, когда указатель указывает на первый элемент, тоесть я переприсваиваю самый первый элмент, на котрый у меня всегда остается указатель
Ниже приведен когд, который работает, когда я сместил один раз указатель вправо, тоесть не изменяю "голову" списка
Где pr - это указатель коорый я двигаю с помощью
и код с помощью которого я все вывожу
Проблема в том, что когда указатель указывает на голову, то все вставляется нормально, но как только я сдвинул указатель вправо, то он вроде бы добавляет, но уже не выводит. не подскажите, в чем проблема.
Весь код ниже, подскажите пожалуйста(
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->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;
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
prpr
(предположительно, это название переменной) присваивается значениеpr
(предположительно, это значение переменной).pr
(предположительно, это значение переменной) присваивается значениеpr->next
(предположительно, это значение свойства или метода переменнойpr
). Обратите внимание, что без дополнительного контекста и подробностей о том, что представляет собойpr
иpr->next
, сложно дать более точное объяснение. Кроме того, код представлен всего двумя строками, и трудно определить полную картину происходящего.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д