CpeBoshra Ответов: 3

круговой связанный список


пожалуйста, помогите мне

Напишите структуру NodeType с тремя переменными-членами
Напишите программу для использования кругового связанного списка для класса TotalLinkedList с четырьмя переменными-членами

Типа
Имя : строка
Класс : int
Связать : Типа *

Затем ваш код вставит имя студента и его оценку:

Если оценка >= 50, вставьте узел в первый проход указателя
Если класс < 50, вставьте узел в первый из указателей Fail
Если оценка недействительна, то не делайте вставку.

TotalLinkedList
-Передайте: Типа *
-Не Получится: Типа *
-CountPass : int
-CountFail: int
+ insert(string, int ) : void
+ deleteNode (int) : void
+ имя поиска (строка) : int
+ FindMax( ): строка
+PrintAverage(): двойной
+ print ( ) : void
+ TotalLinkedList( )
+ ~TotalLinkedList( )
+ TotalLinkedList (TotalLinkedList & )

DeleteNode(int): принимает оценку и удаляет все узлы с этой оценкой

SearchName( string): принимает имя студента и возвращает его оценку, если найдено, иначе возвращает -1
Выведите имя студента и его оценки

В основной функции
TotalLinkedList   Obj1;

Obj1.insert("Ali" , 90);
Obj1.insert("Ahmed", 44);
Obj1.insert("Ruba", 103);
Obj1.insert("Majd", 77);
Obj1.insert("Huda" , 85);
Obj1.insert("Kamel", 39);
Obj1.insert("Ola", -5);
Obj1.insert("Eman", 90);

Now Obj1.deleteNode(90);


Сейчас...
Obj1. print( );   // print the students names and their grades
  
cout<<Obj1.searchName("Ahmad");     // prints the grades of Ahmad (-1 if does not exist)
   //prints  44

cout<<printAverage( ) <<endl; //print the avergae of the students
//61.25

cout<<findMax() <<endl; //prints the student name with hieghest grade
//Huda


Вам нужно попросить пользователя вставить имена или прочитать из файлов (я предпочитаю второй вариант)...
Вам нужно попросить пользователя удалить оценку...

[Edit]добавлен блок кода[/Edit]

Edit: enhzflep - добавлен код из комментария к Paul.

#include <iostraem>
#include <string>
using namespace std;
struct NodeType 
{
 string Name ;
 int Grade ;
 NodeType* Link ;

}
class TotalLinkedList 
{
private:
	NodeType* Pass;
	NodeType* Fail ;
	int CountPass ;
	int CountFail ;

public :
	void insert(string , int );
	void deletNode(int);
	int searchName(string) ;
	int FindMax (string);
	double PrintAverage ();
	void Print ();
	TotalLinkedList();
	~TotalLinkedList();
	TotalLinkedList(TotalLinkedList&);
}
TotalLinkedList::insert (string name ,int grade )
{
	
	cin >> grade ;
	cin >> name ;
	
	if ( grade >=50 )
	{
	   Pass->Name =name ;
	   Pass->Grade =grade
	}
	else 
	{
	   Fail->Name=name; 
	   Fail->Grade=grade;
	}
	else 
	{
	   cout << " can not insert " << endl;
	}  // closing brace missing from source provided by op
}  // closing brace missing from source provided by op

int main ()
{
   return 0 ;
}

3 Ответов

Рейтинг:
27

Barakat S.

Круговой список понравившихся точно такой же, как и обычно связанный список. Единственное отличие состоит в том, что последний список указывает на первый, а не на нуль. Взгляните на этот простой код:

#include <iostream>
using namespace std;

class LinkedList {
public:
    LinkedList(int value) {
        this->value = value;
    }
    int value;
    LinkedList *next;

};

int main(int argc, char **argv)
{
    LinkedList *root       = new LinkedList(1);
    root->next             = new LinkedList(2);
    root->next->next       = new LinkedList(3);
    root->next->next->next = new LinkedList(4);

    root->next->next->next->next = root; // the last list is linked with the fist one

    cout << root->value << endl;                         // 1
    cout << root->next->value << endl;                   // 2
    cout << root->next->next->value << endl;             // 3
    cout << root->next->next->next->value << endl;       // 4 
    cout << root->next->next->next->next->value << endl; // 1 we are back!
    return 0;
}


Вот это волшебство:

root->next->next->next->next = root; // the last list is linked with the first one


Мы просто связали последний список с root. Теперь это будет выглядеть примерно так:

+-->               ---+
| +-- 1 ------- 2 --+ |
  |                 | V
  |                 |
  |                 |
^ |                 |
| +-- 4 ------- 3 --+ |
+---               <--+


Рейтинг:
1

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!


CpeBoshra

Так и есть! Не присутствовал на этой лекции и преподаватель не согласился, чтобы объяснить мне, что я пытался написать немного. Мой код был добавлен к моему вопросу.

Рейтинг:
0

Romik Majumder

Мой код для выполнения каждой операции в круговом односвязном списке
.
.
.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct mynode
{
	int info;
	struct mynode *link;
}Node;
Node*start=NULL;
void insertatbegin()
{
	char c;
	while(1)
	{
		fflush(stdin);
		printf("\ndo you want to continue(y:n)?\n");
		scanf("%c",&c);
		if(c=='y'||c=='Y')
		{
	int a;
	printf("enter the data\n");
	scanf("%d",&a);
	Node *newptr,*ptr;
	newptr=(Node*)malloc(sizeof(Node));
	newptr->info=a;
	if(start==NULL)
	{
		start=newptr;
		newptr->link=start;
	}
	else
	{
		Node *ptr=start;
		while(ptr->link!=start)
		ptr=ptr->link;
		newptr->link=start;
		start=newptr;
		ptr->link=start;
	}
}
else
break;
}
}
void insertatend()
{
	char c;
	while(1)
	{
		fflush(stdin);
		printf("\ndo you want to continue(y:n)?\n");
		scanf("%c",&c);
		if(c=='y'||c=='Y')
		{
	int a;
	printf("enter the data\n");
	scanf("%d",&a);
	Node *newptr,*ptr;
	newptr=(Node*)malloc(sizeof(Node));
	newptr->info=a;
	if(start==NULL)
	{
		start=newptr;
		newptr->link=start;
	}
	else
	{
		ptr=start;
		while(ptr->link!=start)
		ptr=ptr->link;
		ptr->link=newptr;
		newptr->link=start;
	}
	
}
else
break;
}
}
void insertapos()
{
	int pos,a,b,i;
	Node *newptr,*ptr,*temp;
	ptr=start;
	temp=start;
	printf("\nEnter position and value\n");
	scanf("%d%d",&pos,&a);
	newptr=(Node*)malloc(sizeof(Node));
	newptr->info=a;
	b=1;
	fflush(stdin);
	while(temp->link!=start)
	{
		temp=temp->link;
		b=b+1;
	}
		if(pos<=b)
	{
		if(pos==1)
		{
		while(ptr->link!=start)
		ptr=ptr->link;
		newptr->link=start;
		start=newptr;
		ptr->link=start;
		printf("\nData inserted\n");
		}
		else
		{
		for(i=1;i<pos-1;i++)
		{
			ptr=ptr->link;
		}
		temp=ptr->link;
		ptr->link=newptr;
		newptr->link=temp;
		printf("\nData inserted\n");
	}
}
	else
	printf("\nwrong position!!\n");
}
void deleteatbegin()
{
	fflush(stdin);
	Node *ptr,*temp=start;
	ptr=start;
	if(start==NULL)
	{
		printf("\nThere is nothing to delete\n");
	}
	else
	{
		while(temp->link!=start)
		temp=temp->link;
		ptr=ptr->link;
		temp->link=ptr;
		start=ptr;
		printf("\ndeleted from beginning\n");
		fflush(stdin);
	}
}
void deleteatend()
{
	fflush(stdin);
	Node *ptr;
	ptr=start;
	if(start==NULL)
	{
		printf("\nThere is nothing to delete\n");
	}
	else
	{
		while(ptr->link->link!=start)
		ptr=ptr->link;
		ptr->link=start;
		printf("\deleted from end\n");
	}
}
void deletepos()
	{
		int pause;
		printf("\nEnter position\n");
		scanf("%d",&pause);
		Node *temp;
		Node *ptr;
		temp=start;
		int c=1,p=1;
		while(temp->link!=start)
	{
		temp=temp->link;
		p=p+1;
	}
		if(pause<=p)
		{
			if(pause==1)
			{
				ptr=start;
				while(temp->link!=start)
		temp=temp->link;
		ptr=ptr->link;
		temp->link=ptr;
		start=ptr;
		printf("\nData deleted from specified position\n");		
			}
			else{
		temp=start;
		for(;c<pause-1;c++)
			temp=temp->link;			
		ptr=temp->link->link;
		temp->link=ptr;
		printf("\nData deleted from specified position\n");
	}
}
	else
	printf("\n Wrong choice\n");
}
	void display()
	{
		fflush(stdin);
		Node *ptr;
		ptr=start;
		printf("\n LIST \n");
		if(start==NULL)
		{
			printf("\n There is nothing to print \n");
		}
		else
		{
			while(ptr->link!=start)
			{
				printf("->%d",ptr->info);
				ptr=ptr->link;
			}
			printf("->%d",ptr->info);
			printf("->NULL\n");
		}
		
	}
	int main()
	{
		int choice;
		printf("\n**************************MAIN MENU**************************\n");
		printf("\t1. insert data at beginning\n");
		printf("\t2. insert data at end\n");
		printf("\t3. insert data at specified position\n");
		printf("\t4. delete data from beginning\n");
		printf("\t5. delete data from end\n");
		printf("\t6. delete data from specified position\n");
		printf("\t7. display the list\n");
		printf("\t0. to exit\n");
		printf("\t Enter any option:");
		scanf("%d",&choice);
		if(choice==0)
		exit(0);
		switch(choice)
		{
			case 1:
				insertatbegin();
				getch();
				main();
				break;
			case 2:
				insertatend();
				getch();
				main();
				break;
			case 3:
				insertapos();
				getch();
				main();
				break;
			case 4:
				deleteatbegin();
				getch();
				main();
				break;
			case 5:
				deleteatend();
				getch();
				main();
				break;
			case 6:
				deletepos();
				getch();
				main();
				break;
			case 7:
				display();
				getch();
				main();
				break;
			deafult:
				printf("\n Enter the correct choice\n");
				getch();
				main();
		}
		return 0;
	}


CHill60

Предоставление решений для домашних заданий на самом деле никому не помогает.
Преподаватели и преподаватели знают об этом сайте и могут легко проверить наличие решений, только что скопированных отсюда.
Студенты, которые просто копируют решения, ничего не учатся, делая это.
А раскомментированные дампы кода никоим образом не являются учебными

Richard Deeming

Кроме того, если ОП не успел сдать домашнее задание за последние восемь лет, они, вероятно, уже провалили курс. :)

CHill60

Мы можем только надеяться!