PDA

Показать полную графическую версию : Помогите с лабораторными работами!!!!!!HELP!!!


Lebronmax2
21-06-2011, 18:20
Работа со списками.
1) Поменять местами первый и указанный элементы.
2)Определить четность элементов списка.

lxa85
21-06-2011, 19:29
Lebronmax2, Основы программирования для информатиков и инженеров: (http://www.e-biblio.ru/book/bib/01_informatika/Teoriaj_programmir/UP1/Posobie1.htm) Глава 8. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ. РАБОТА СО СПИСКАМИ.
Если после прочтения будут непонятные моменты, спрашивайте, цитируя оригинал.

Lebronmax2
21-06-2011, 21:28
Блин я вообще туго со списками!!! Но у меня есть код для замены первого и последнего!!!!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<alloc.h>
void enter(void);
void print(void);
void del(void);
void change(void);
struct List *find(int a);

struct List
{
int data;
struct List *next;
};

struct List *start;
struct List *current,*last;

void main()
{
start=NULL;

label:
switch(menu_select()) {
case 1: enter();
break;
case 2: print();
break;
case 3: find(3);
break;
case 4: del();
break;
case 5: exit(0);
}
goto label;
getch();

}

int menu_select(void)
{
char s[80];
int c;

printf("Menu programy\n");
printf("1. Vvod novogo slova\n");
printf("2. Otobrazhenie spiska\n");
printf("3. Poisk slova\n");
printf("4. del\n");
printf("5. Exit\n");
printf("6. ch\n");
do {
printf("\nVash vybor: ");
scanf("%d",&c);
} while(c<0||c>5);
return c;
}


void enter(void)
{

current=(struct List*)malloc(sizeof(struct List));
printf("\nVvedite \n");
scanf("%d",&current->data);
current->next=NULL; //указатель на следующий элемент=0
if (start==NULL) start=current; //если первый - текущий=первый
else //предыдущий должен указывать на новый
{
last=start;
while(last->next) last=last->next;
last->next=current; }
}

void print()
{
current=start;
while(current)
{
printf("\n%d ",current->data) ;
current=current->next;
}
}


struct List* find(int a)
{

current=start;
while(current!=NULL)
{
if (current->data==a)
return current;
current=current->next;
}
return NULL;
}

void del()
{
struct List *pred;
current=find(3);
if (current==NULL)
{
printf("\nNe naideno \n");;
}
else
{
if (current==start)
{
start=start->next;
free(current);
}
else
{
pred=start;
while (pred->next!=current)
pred=pred->next;
pred->next=current->next;
free(current);
}
}
}
void change();
{
struct List *ch;
if(start)
{
current=start;
}
}

/*
int main()
{
int i=0;
struct List *current;
struct List *last;
start=NULL;
/*for(i=0;i<5;i++){
add();}
print();
printf("\n%s",find());
getch();
return 0;
} */

Переделайте!!!

Lebronmax2
23-06-2011, 21:49
Вже все вирішив!!!!!




© OSzone.net 2001-2012