الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برنامج لادخال اسماء في(دبل لينكد ليست) ترتيب ابجدي

مغلق
بدأه ~ c h i c ~ في 9 أبريل 2005 · 4 رد · 1,244 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

احتاج مساعدتكم في برنامج

يقرأ اسماء ويحفظها فيdouble linked list

حسب الترتيب الابجدي

انا عملت البرنامج وهذا الكود تبعي:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct node{
	char str[20];
	struct node *next;
	struct node *pre;
}*ptr,*temp,*prvious,*cur;//pointers to the nodee

void printlist(struct node *,struct node *);
int main(){
	char value[20];
	int num,i;

	printf("\n         hi..this program well sort the strings that u well type\n");
	printf("                      in ascending order\n");
	printf("                (( from the big to the small ))\n");
	printf("\n           plz.. enter the numbers of string that u well type:");
	scanf("%d",&num);

	printf("\n                       now..enter the strings\n");
	gets(value);
	ptr=malloc(sizeof(struct node));
	strcpy(ptr->str,value);//put the 1st string in the 1st node
	ptr->next=NULL;
	ptr->pre=NULL;

	for(i=0;i<num;i++){
  scanf("\n");
  gets(value);
  temp=malloc(sizeof(struct node));
  strcpy(temp->str,value);//put the string in the temp node
  temp->next=NULL;
  temp->pre=NULL;

  prvious=NULL;
  cur=ptr;

  while(cur!=NULL && strcmp(value,cur->str)<0){
 	 //while not end of the list & the value>cur string
 	 prvious=cur;
 	 cur=cur->next;}

  if(prvious==NULL){//put in the start of the list
 	 temp->next=cur;
 	 cur->pre=temp;
 	 ptr=temp;}
  else{//put in the middle or the end of the list
 	 prvious->next=temp;
 	 cur->pre=temp;
 	 temp->pre=prvious;
 	 temp->next=cur;
 	 }
	}
	printlist(ptr,cur);
	return 0;
}

//---------------funciton print-------------------	
void printlist(struct node *ptr,struct node *cur){

	cur=ptr;
	printf("\n\n                  *********** the list: ***********\n");
	while(cur!=NULL){
  printf("                                 %s\n",cur->str);
  cur=cur->next;}
}

المشكلة

انه يرتب لي الاسماء ولكن بالعكس

يعني بدل ما يطبع

ahmad

basma

dana

يطبع:

dana

basma

ahmad

وين المشكلة؟؟؟؟

ومشكورين مقدماً على المساعدة

#2

اهلييين

انا ابغى البرنامج بتعدل بالعكس

يعني بدل ما يطبع من z to a

يطبع من a to z

#3

السلام عليكم

حقية لم أجرب الكود ولكن مؤقتا جرب ما سأذكره لك.

قم بتغيير الاشارة من

value,cur->str)<0

الى

اقتباس
value,cur->str)>0

اي غير الاشارة من > الى < جرب ذلك وانا بجرب الكود عندي وان شاء الله اشوفه بس ياليت يساعديني الوقت.

بالتوفيق.

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#4

السلام عليكم

الكلام السابق في مشاركتي السابقة خطأ فلا تأخذ به ابدا.

جربت كودك مع الغموض الكبير فيه وحاولت تتبعه فوجدته كما قلت انت يطبع الاسماء بالعكس.

وأتوقع والعلم عند الله.

أنه يجب عليك تتبع الكود جيدا أقصد تتبع القائمة المتصلة فأنت في برنامجك شكله يضيف العقدة node من الاخير ولذلك شكله يخرج لك الناتج بناء على ذلك.

فلازم تتأكد متى تضيف من اول القائمة أم من أخرها.

حقيقة لو كان الكود اوضح يمكن اشوفه لكن ماستطعت فالمعذره.

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#5

الف الف الف الف شكر

ابشرك حليت المشكلة :rolleyes:

الحل:

في funciton print

استبدلت:

//---------------funciton print------------------- 
void printlist(struct node *ptr,struct node *cur){

cur=ptr;
printf("\n\n                  *********** the list: ***********\n");
while(cur!=NULL){
 printf("                                 %s\n",cur->str);
 cur=cur->next;}
}

بـ:

//-------------------------funciton print----------------------	
void printlist(struct node *ptr,struct node *cur){


	printf("\n\n                  *********** the list: ***********\n");
	while(cur!=NULL){
  printf("                                 %s\n",cur->str);
  cur=cur->pre;}
}
//---------------------------end progam------------------------

وشكراَ جزيلاَ :)

تم تعديل هذه المشاركة بواسطة ~ c h i c ~ في 12 أبريل 2005 في 22:54

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…