View Full Version : مبتدی: کلاس پشته stack class چه کاربردی داره؟
t.mohajer93
چهارشنبه 11 تیر 1393, 11:50 صبح
سلام دوستان. من دارم زبان جاوا رو به صورت خودآموز یاد میگیرم. مفهوم کلاس stack برام ملموس نیست امکانش هست یکی دو تا تمرین ساده بهم معرفی کنید درحدی که با یه راهنمایی شما بتونم خودم کدش رو بنویسم و از این طریق مفهوم و کاربردش برام جا بیفته.
من با سی پلاس پلاس آشنایی دارم اگه مفهوم مشابه ای اونجا هست هم ممنون میشم معرفی کنید.
باتشکر
farazjalili
چهارشنبه 11 تیر 1393, 11:58 صبح
با سلام stack بیش تر مفهوم data structure هستش تا برنامه نویسی - این طور در نظر بگیرین که stack یک ظرفی هستش برای ذخیره سازی data که بر عکس صف آخرین data که وارد یک ظرف می شود اول از همه خارج می شود لینک زیر توضیحی در موردش داده
http://www.tutorialspoint.com/java/java_stack_class.htm
t.mohajer93
چهارشنبه 11 تیر 1393, 12:33 عصر
چه سایت جالبی معرفی کردید
:)
ممنون
پس مثلا اگه بخوام برنامه دفترچه تلفن رو بنویسم میتونه به کار بیادولی مثلا برای برنامه های ساده ریاضی مثل ماشین حساب و این جور چیزها کارایی نداره درسته؟
cups_of_java
چهارشنبه 11 تیر 1393, 13:24 عصر
چه سایت جالبی معرفی کردید
:)
ممنون
پس مثلا اگه بخوام برنامه دفترچه تلفن رو بنویسم میتونه به کار بیادولی مثلا برای برنامه های ساده ریاضی مثل ماشین حساب و این جور چیزها کارایی نداره درسته؟
بر عکس! پشته یه جور ساختاریه که برای برنامه های الگوریتمیک... مثل محاسبه عبارات ریاضی، حوزه بندی متغیر های اتوماتیک، بعضی عملیات روی گراف ها و .... کاربرد داره اما تو برنامه های دفترچه تلفن و ... نه کاربردی نداره.
ذاته پشته طوریه که اون داده هایی که میزاری انباشته میشن رو هم... یعنی اونایی که آخر گذاشتی بالا تر و تو دسترسن... بنابراین هر مسئله ای که لازم باشه شما این ترتیبی داده هات رو بررسی کنی از پشته باید استفاده کنی.
t.mohajer93
چهارشنبه 11 تیر 1393, 19:33 عصر
بر عکس! پشته یه جور ساختاریه که برای برنامه های الگوریتمیک... مثل محاسبه عبارات ریاضی، حوزه بندی متغیر های اتوماتیک، بعضی عملیات روی گراف ها و .... کاربرد داره اما تو برنامه های دفترچه تلفن و ... نه کاربردی نداره.
ذاته پشته طوریه که اون داده هایی که میزاری انباشته میشن رو هم... یعنی اونایی که آخر گذاشتی بالا تر و تو دسترسن... بنابراین هر مسئله ای که لازم باشه شما این ترتیبی داده هات رو بررسی کنی از پشته باید استفاده کنی.
اوه! چه اشتباه بدی کردم پس!
آخه دوستمون گفتند یک ظرفی هستش برای ذخیره سازی data من فکر کردم هر چیزی رو میتونیم ذخیره کنیم! بببخشید اگه سوالام پیش پا افتاده ست. ببینید درست میگم:
پشته مثل این می مونه که ما یه سری دیتا رو روی هم قرار دادیم و وقتی می خوایم به یکی شون دسترسی داشته باشیم باید همه قبلی ها برداشته بشن. اینکه چطور چیزی اضافه یا کم بشه رو توی مثال اون سایت فهمیدم اما آیا فقط با عدد کار میکنیم؟ اینکه فکر کردم بدرد دفترچه تلفن می خوره به خاطر این بود که میگفتم هر اسم و شماره ای با هم درنظر گرفته بشن و ما یه صف از اینها داریم اشتباهه آره؟
معمولا استادها وقتی این رو درس میدن چه تمرینهایی از بچه ها می خوان؟
cups_of_java
چهارشنبه 11 تیر 1393, 23:11 عصر
نه هر چیزی رو (عدد، رشته حرفی، یک شی، رکورد، ...) توی ساختارداده ها (مثل صف و پشته و درخت و ...) میتونی بزاری
تو مثال دفترچه تلفن شما ممکنه یهو شماره سعید رو بخوای و سعید رکورد 15ام لیست باشه و باید بهش دسترسی داشته باشی دیگه! یعنی اونجا شما دسترسی تصادفی و .... ها داری. لیست بدردت میخوره. نه صف! نه پشته!
توی صف و پشته شما نمی تونی به یه رکورد وسط داده ها دسترسی داشته باشی.. از یه سر فقط بر میداری! توی پشته همیشه آخری رو بر میداری... توی صف همیشه اولی (اونی که زودتر اومده بوده) رو برمیداری (مثل همین بانک ها که میری نوبت میگیری یا نون وایی، یهو کسی از وسط یا آخر نون نمیگره!
برای پشته مثال هایی مثل تبدیل عبارات میانوندی به پیشوندی یا پسوندی، محاسبه عبارات پیشوندی یا پسوندی، نوشتن کامپایلر های ساده، نوشتن QuickSort، یا بعضی مثال های الگوریتمیک دیگه استفاده میشه. اینجا رو ببین (http://en.wikipedia.org/wiki/Stack_(abstract_data_type)#Applications)
t.mohajer93
چهارشنبه 11 تیر 1393, 23:45 عصر
آهان! متوجه اشتباهم شدم:خجالت:
ممنون
پس من فعلا برم اون مطالبو بخونم اگه سوالی بود باز مزاحم میشم. ممنون :لبخندساده:
ftmh02
شنبه 14 تیر 1393, 11:20 صبح
سلام من یه برنامه نوشتم که کارش تبدیل infix به postfix هستش ولی error داره تا پس فردا هم بیشتر وقت ندارم تا تمومش کنم ممنون میشم اگه کمکم کنید
import java.util.*;public class Infix2inpost {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner input = new Scanner(System.in);
String infix ;
infix = input.next();
System.out.print("postfix is :");
InfixToPostfix(infix);
System.out.println("\n");
}
public static void InfixToPostfix(String f) {
String fix = f;
Stacked stk;
stk = new Stacked(fix.length());
char op ='.' ;
char c;
for ( int i=0 ; i <= fix.length() ; i++){
c = fix.charAt(i);
if (c!= '+' & c!='*' & c!= '/' & c!= '-'){
op+= c ;
}
else {
if (c=='(')
stk.push(c);
if (c == ')' ){
op+= stk.peek() ;
stk.pop();
}
if ( stk.isEmpty() ){
stk.push(c) ;
}
else {
int valeu = 0;
int v = 0;
switch (c){
case '*':
case '/':
valeu = 4;
break;
case '+' :
case '-' :
valeu = 3;
break;
}
switch (stk.peek()){
case '*':
case '/':
v = 4;
break;
case '+' :
case '-' :
v = 3;
break;
}
if (v <= valeu){
stk.push(c);
}else {
op+= stk.peek() ;
stk.push(c);
}
}
}
}
for ( ; !stk.isEmpty() ;){
op+=stk.peek();
}
System.out.print( op);
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.