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

ماهو stack ياشباب؟؟؟!

مغلق
بدأه finder في 19 ديسمبر 2001 · 1 رد · 570 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا هل من الممكن ان تشرحوا لي ماهو stack وفيم يستخدم مع خالص الشكر والتحيه .

#2

هلا أخوي فايندر :

الستاك ببساطه اشبه باللنك لست ففهم اللنك لست يسهل كثيراُ

فهم الستاك.فاللنك لست اكثر عمليات من الستاك و اصعب.

الستاك هو مجموعة من الخلايا المتصلة ببعض عن طريق المؤشرات.

(إلى هنا التعريف مثل اللنك لست تماماً). ولكن تختلف عن اللنك لست

انها لا يجوز الإضافه اليها او الحذف منها إلا من الامام.

فدالة الاضافه هي push مثل insert first في اللنك لست.

ودالة الحذف هي pop مثل delete first في اللنك لست.

لذلك يسمون الستاك بالــ ليفو L I F O .

(last in first out).

اي الذي يدخل بالاخير يخرج اولاً.

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

تجربة وترى.

 
#include
//----------------------------------
typedef struct
{
	int id;
	float gpa;
}data;
//----------------------------------
typedef struct nodes
{
	data e;
	struct nodes *next;
}ns, *ptrs;
//----------------------------------
typedef struct stack
{
	ptrs top;
}stack;
//----------------------------------
data z;

void pop(stack *s, data *z);
void push(stack *s, data newe);
int emptystack(stack s);
void newstack(stack *s);

void pop(stack *s, data *z)
{
	ptrs p;
	if(s->top==NULL)
		printf("n>>>>> soryy empty stack <<<<	else
	{

		p=s->top;
		*z=p->e;
		s->top=p->next;
		free(p);
	}
}

void push(stack *s, data newe)
{
	ptrs p;
	p=malloc(sizeof(ns));
	p->e=newe;
		if(s->top==NULL)
		{
			s->top=p;
			p->next=NULL;
		}
		else
		{
			p->next=s->top;
			s->top=p;
		}
}

int emptystack(stack s) 
{
	return(s.top==NULL);
}

void newstack(stack *s)
{
	s->top=NULL;
}

void readrec(data *k);
void readrec(data *k)
{
	printf("n enter the id:");
	scanf("%d",&k->id);
	printf("n enter the gpa:");
	scanf("%f",&k->gpa);
}

void re(stack *s,stack *s1);
void re(stack *s,stack *s1) ////// revers_stack....
{
	while(!(emptystack(*s)))
	{
		pop(s,&z);
		push(s1,z);
	}
}

void display(stack *s);
void display(stack *s) //// Display stack
{
	stack s1;
	newstack(&s1);
	printf("nTise stack contauns:");
	printf("n--------------------------n");
	printf("nid number:ttGPA:n");
	printf("n-----------------------------------n");

	while((emptystack(*s)==0))
	{
		pop(s,&z);
		printf("n%dtt%5.2f",z.id,z.gpa);
		push(&s1,z);
	}
	re(&s1,s);
}





main()
{
	int ch=0;
	data i;
	stack s;
	newstack(&s);

	do
	{
	printf("nnnn              +-------------------------------------------------+");
	printf("n              |(1) Add                                          |");
	printf("n              |(2) Delete                                       |");
	printf("n              |(3) Print the list.                              |");
	printf("n              |(4) Exit.                                        |");
	printf("n              +-------------------------------------------------+");
	scanf("%d",&ch);

		switch(ch)
		{
		case 1: readrec(&i);
			    push(&s,i);
			break;
		case 2:pop(&s,&i);
			break;
		case 3:display(&s);
			break;
		}
	}while(ch!=4);
}

ويستخدم الستاك في حفظ المعلومات على شكل سلسلة مترابطه

يسهل الاضافة و الحذف منها.فكل خلية تحمل معلومات عن شئ معين.

فلو افترضنا ان لدينا شركة يعمل بها موظفين فبدل حفظ الموظفين

في عدة مصفوفات واحده للاسم و الثانيه للعمر ...الخ

نعوض ذلك في بناء سجل لمعلومات الموظف الواحد ومن ثم حفظها

في ستاك بحيث كل خليه تحمل معلومات الموظف الواحد. وهكذا

وليس شرط استخدام الستاك بل من الممكن استخدام الكيوز او

اللنك لست بانواعها. فهي كلها تقوم على نفس المبداء.

وكما يوجد لها أستخدامات أيضاً في بناء المترجمات وما إلى ذلك...

وربما تود ان تزور هذا الرابط الذي يحوي معلومات عن اللنك لست

قد تـفيدك.

http://www.arabteam2000.com/vb/showthread....=&threadid=6669

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

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