Сформировать односвязный списком с типом информационного поля char* - C (СИ)

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

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

Нужно сформировать односвязный списком с типом информационного поля char* С типом int программа работает нормально, с типом char* компилирует, но работает не правильно. Насколько я понимаю, это связано с объемом памяти, отводимой под символы. Помогите отредактировать программу, пожалуйста. P.S. Программировать начал недавно, так что уровень программы низкий, не обессудьте
#include <stdio.h>
#include <conio.h>
 
struct list
{char* data;
list *next;
};
 
list *make_list(int );
void print_list(list *);
 
int main (){
    int m;
    list* adr;
    printf ("number of elements = ");
    scanf ("%d",&m);
    adr=make_list(m);
    print_list(adr);
}

list *make_list(int n)
{list *first,*tec,*nel,*tel;
int i;
first=new list;
printf ("Enter the element = ");//vvodim znachenie pervogo elementa
scanf ("%c",&first->data);
first->next=NULL;//obnulyaem adresnoe pole
tec=first;//stavim ukazatel tec
for (i=0;i<n-1;i++)
{
    nel=new list;//pamyat' pod novyi element
    printf ("\nEnter the element = ");//sozdaem new element 
    scanf ("%c",&nel->data);
    nel->next=NULL;
    tec->next=nel;
    tec=nel;
    }
return first;
}
 
void print_list(list *first)
{list *tec=first;
while (tec!=NULL){
    printf ("%c ",tec->data);
    tec=tec->next;
    }
}

Решение задачи: «Сформировать односвязный списком с типом информационного поля char*»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
struct list
{char data;
list *next;
};
 
list *make_list(int,char* );
void print_list(list *);
list* add_point(int,int,list*,char*);
 
int main (){
    int m,f;
    char alph[27]="abcdifghigklmnopqrstuvwxyz";
    list* adr;
    printf ("number of elements = ");
    scanf ("%d",&m);
    adr=make_list(m,alph);
    print_list(adr);
    printf ("\nNumber of additon = ");
    scanf ("%d",&f);
    add_point(m,f,adr,alph);
    print_list(adr);
    getch();
    return 0;   
}
 
 
list *make_list(int n,char*mas)
{list *first,*tec,*nel;
int i;
srand(time(NULL));
first=new list;
first->data=mas[rand()%26];
first->next=NULL;
tec=first;
for (i=0;i<n-1;i++)
{   
    nel=new list;
    nel->data=mas[rand()%26];
    nel->next=NULL;
    tec->next=nel;
    tec=nel;
    }
return first;
}
 
void print_list(list *first)
{list *tec=first;
printf ("\nThe full list: ");
while (tec!=NULL){
    printf ("%c ",tec->data);
    tec=tec->next;
    }
}
 
list* add_point(int n,int k,list* first,char*mas)
{
    int i;
    list *tec,*newel;
    srand(time(NULL));
    tec=first;
    newel=new list;
    newel->data=mas[rand()%26];
    if (k==0){
        newel->next=first;
        first=newel;
        return first;
        }
    for (i=0;i<k-1&&tec!=0;i++)
        tec=tec->next;
        if(tec!=0){
            newel->next=tec->next;
            tec->next=newel;
        } 
        else {
            printf ("\nError, number k is wrong");
        }
    return first;   
}

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

  1. Структура списка определена в файле , , и
  2. Функция make_list создает список из n элементов, используя массив символов alph.
  3. Первый элемент списка выбирается случайным образом из массива alph.
  4. Функция print_list выводит список на экран.
  5. Функция add_point добавляет k элементов в начало списка.
  6. Если k равно 0, новый элемент становится первым элементом списка.
  7. Если k больше 1, функция ищет место для добавления элементов в списке.
  8. Если найденное последнее звено списка имеет следующий элемент, равный NULL, значит, список пуст, и новый элемент добавляется в начало списка.
  9. Если найденное последнее звено списка имеет следующий элемент, отличный от NULL, новый элемент добавляется в начало списка, и ссылка на новый элемент передается в качестве следующего элемента найденного последнего звена списка.
  10. Если после k-1 проходов по списку не найдено ни одного звена списка со следующим элементом, равным NULL, выводится сообщение об ошибке.

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


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

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

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