#include <stdio.h>
#include <malloc.h>

//برنامج الانتخاب


//تركيبة القائمة المتصلة

//////////////////////////////
struct  Node             /////			   
{						 /////	
	int info;			 /////	
	struct Node *next;   /////   
};						 /////
//////////////////////////////


// تعريف مؤشر الى العقدة واستخدامه في تعريف بقية المؤشرات الى القائمة

/////////////////////////////
typedef struct Node * PTR; //
/////////////////////////////

//الدوال اعمليات على القائمة

///////////////********************/////////////////////////////////////////////////
///                                                                               //
PTR   Getnode();						 //دالة انشاء عقدة                        //
void  AddEndList( PTR list, int x );  //دالة انشاء عقدة من  اخر القائمة			  //
PTR   Formlist();                     //دالة ادخال العقد حتى n عقدة               //
void  PrintList( PTR  list );		 //دالة طباعة القيم التي في  القائمة كلها     //
void  PrintCounter( PTR list );
///																				  //																			
///////////////********************/////////////////////////////////////////////////



int main()
{
	PTR  list = NULL;
	int n; // العدد الكلي للعقد او للاصوات
	int x; // القيمة المدخلة للصوت

	

	printf("How Many Nods ? ");
	scanf("%d",&n);
	printf("Enter x = ");
	scanf("%d",&x);
	

	//انشاء أول عقدة

	list = Getnode();
	list->info = x;
	list->next = NULL;
	
	for( int i=1; i<n; i++ )
	{
		printf("Enter x = ");
		scanf("%d",&x);
		AddEndList( list,x );
	}

	PrintCounter( list );
	printf("\n\n\n");
	
	/*printf("\n list are values \n");
	PrintList( list );*/




	return  0;
}



//جسم دالة انشاء عقدة
PTR  Getnode()
{
	PTR p = (PTR)malloc( sizeof(struct Node) );

	return  p;
}


//دالة اضافة حلقة للقائمة من عند اخر القائمة
void  AddEndList( PTR list, int x)
{
		PTR p = list;

		while( p->next != NULL )
			p = p->next;

		PTR q = Getnode();
		q->info = x;
		p->next = q;
		q->next = NULL;

}



//دالة طباعة قيم العقد التي في القائمة
void PrintList( PTR  list )
{
	PTR p = list;

	while( p != NULL )
	{
		printf("%d -> ",p->info);
		p = p->next;
	}
	printf("NULL \n\n");
}

void  PrintCounter( PTR list )
{
	PTR p = list;
	//مصفوفة لحساب عدد اصوات الناخبين
	int Counter[7];

	
	for( int i=0; i<7; i++ )
		Counter[i] = 0;	

	while( p != NULL )
	{
		switch( p->info )
		{

			case 1:
			Counter[0] ++;
			break;

			case 2:
			Counter[1] ++;
			break;

			case 3:
			Counter[2] ++;
			break;

			case 4:
			Counter[3] ++;
			break;

			case 5:
			Counter[4] ++;
			break;

			case 6:
			Counter[5] ++;
			break;

			case 7:
			Counter[6] ++;
			break;

			default:
				break;

		}

		p = p->next;
	}


	//طباعة المنتخب و عدد الاصوات لكل منتخب
		for(  i=0; i<7; i++ )
		{
			printf("\n\t%d = %d",i+1,Counter[i] );
		}	

}