Basit Bir Data Structures Sorusu
-
#include <iostream>
struct node{
int number;
node *next;
node *previous;
};
struct list{
node *head;
node *tail;
void create();
void deleteAll();
void add(node *newNode);
void print();
};
using namespace std;
int main(){
list adres_kitabi;
adres_kitabi.create();
cout<<"Bu programda temel liste operasyonlarini isleyecegiz."<<endl;
cout<<"Temel liste operasyonlari:Silme,ekleme,yazdirma ve olusturmadan olusmaktadir"<<endl;
cout<<"Lutfen yapmak istediginiz operasyonu seciniz"<<endl;
bool emrah=true;
while(emrah){
cout<<"Operasyon listesi:"<<endl;
cout<<"1.Yeni eleman ekle"<<endl;
cout<<"2.Eleman sil."<<endl;
cout<<"3.Eleman yazdir"<<endl;
cout<<"Tercihinizi giriniz"<<endl;
int tercih;
cin>>tercih;
node x;
if(tercih==1){
adres_kitabi.add(&x);
}
emrah=false;
cout<<x.number;
}
}
void list::create(){
head=NULL;
tail=NULL;
}
void list::add(node *newNode){
newNode=new node;
if(head==NULL){
cout<<"Lutfen numara giriniz"<<endl;
cin>>newNode->number;
newNode->next=NULL;
newNode->previous=NULL;
head=newNode;
}
/*
else{
newNode->previous=head;
newNode->next=tail;
tail->previous=newNode;
newNode=head;
}
*/
}
Hocalar burada x.number deyince başka bir sayı veriyor ben newNode diye adlandırdığım nodeun değerini versin istiyorum.Bu değer de kullanıcı tarafından atanıyor.
-
#include <iostream>
struct node{ int number; node *next; node *previous; }; struct list{ node *head; node *tail; void add(node *); void create(); void deleteList(); }emrah; using namespace std; int main(){ emrah.create(); cout<<"1 yaz"<<endl; int secim; cin>>secim; if (secim==1){ node x; emrah.add(&x); cout<<x.number; } } void list::create(){ head=NULL; tail=NULL; } void list::add(node *Node){ Node=new node; cout<<"Sayi gir"<<endl; cin>>Node->number; cout<number; head=tail=Node; } Burada x.number deyince neden -982231 gibi bir değer veriyor?
ataturkcu1 tarafından 19/Ara/12 20:39 tarihinde düzenlenmiştir -
yukarı^^
konuya gelen giden olmamış :/
-
x nodunu main içinde yerel olarak yaratmış ve adresini add metoduna yollamışsın, buraya kadar normal. Add metodunda parametre olan pointer (Node) x'in adresini gösteren her hangi bir pointer dır.
Sen bu pointer üzerinde x ile ilgili işlem yapmak yerine, yeni bir node nesnesi yaratıp adresini bu pointer a atamışsın. Ondan sonra yapılan hiç bir işlem main içinde yaratılan x i etkilemez, yeni yaratılan nesneyi etkiler. x.number da stacktaki rastgele bir sayıyı yazar. Kullancıdan aldığın sayı ise new ile yarattığın yeni nesnede.
Özet: "Node=new node;" satırını sil çalışır.
-
c++ bilmiyorum ama bir tahmin yazim büyük sayılarla mı işlem yapıyorsun acaba number overflow olmuş olabilir mi ?
-
Tugberk bunu yazdı
x nodunu main içinde yerel olarak yaratmış ve adresini add metoduna yollamışsın, buraya kadar normal. Add metodunda parametre olan pointer (Node) x'in adresini gösteren her hangi bir pointer dır.
Sen bu pointer üzerinde x ile ilgili işlem yapmak yerine, yeni bir node nesnesi yaratıp adresini bu pointer a atamışsın. Ondan sonra yapılan hiç bir işlem main içinde yaratılan x i etkilemez, yeni yaratılan nesneyi etkiler. x.number da stacktaki rastgele bir sayıyı yazar. Kullancıdan aldığın sayı ise new ile yarattığın yeni nesnede.
Özet: "Node=new node;" satırını sil çalışır.
Cok sagol hocam,peki surekli node eklemek istedigimden maindeki x'i node *x x=new node diye tanimlayip fonksiyona mi gondermeliyim?
-
hypnot1c bunu yazdı
c++ bilmiyorum ama bir tahmin yazim büyük sayılarla mı işlem yapıyorsun acaba number overflow olmuş olabilir mi ?
Yok hocam @tugberk in dedigiyle alakaliymis sorun. -
ataturkcu1 bunu yazdıTugberk bunu yazdı
x nodunu main içinde yerel olarak yaratmış ve adresini add metoduna yollamışsın, buraya kadar normal. Add metodunda parametre olan pointer (Node) x'in adresini gösteren her hangi bir pointer dır.
Sen bu pointer üzerinde x ile ilgili işlem yapmak yerine, yeni bir node nesnesi yaratıp adresini bu pointer a atamışsın. Ondan sonra yapılan hiç bir işlem main içinde yaratılan x i etkilemez, yeni yaratılan nesneyi etkiler. x.number da stacktaki rastgele bir sayıyı yazar. Kullancıdan aldığın sayı ise new ile yarattığın yeni nesnede.
Özet: "Node=new node;" satırını sil çalışır.
Cok sagol hocam,peki surekli node eklemek istedigimden maindeki x'i node *x x=new node diye tanimlayip fonksiyona mi gondermeliyim?
Öncelikle new ve delete i kendin kullanmamalısın, genel mantık linked list de şudur.
bir handle alanı vardır ve burada liste ile ilgili genel bilgiler tutulur, head tail toplam node sayısı vb, C++ da burası zaten nesnenin kendisi, sen nesneyi yarattığında bu alan kurucu işlev tarafından ilklenir.
Node yapısında ne olacağını zaten biliyorsun.
sen asla node yaratmazsın, sen sadece nesnenin add metoduna, data yollarsın, mesela list.add(55), new işlemi add metodunda yapılır, yıkıcı işlev tüm node ları delete ile siler.
Özetle main içinde
List mylist;
mylist.add(55);
mylist.add(66);
list.walk();
vb şeklinde gitmesi lazım kodun, sen new delete node vs görmemelisin sınıfı kullanırken.
-
Tugberk bunu yazdıataturkcu1 bunu yazdıTugberk bunu yazdı
x nodunu main içinde yerel olarak yaratmış ve adresini add metoduna yollamışsın, buraya kadar normal. Add metodunda parametre olan pointer (Node) x'in adresini gösteren her hangi bir pointer dır.
Sen bu pointer üzerinde x ile ilgili işlem yapmak yerine, yeni bir node nesnesi yaratıp adresini bu pointer a atamışsın. Ondan sonra yapılan hiç bir işlem main içinde yaratılan x i etkilemez, yeni yaratılan nesneyi etkiler. x.number da stacktaki rastgele bir sayıyı yazar. Kullancıdan aldığın sayı ise new ile yarattığın yeni nesnede.
Özet: "Node=new node;" satırını sil çalışır.
Cok sagol hocam,peki surekli node eklemek istedigimden maindeki x'i node *x x=new node diye tanimlayip fonksiyona mi gondermeliyim?
Öncelikle new ve delete i kendin kullanmamalısın, genel mantık linked list de şudur.
bir handle alanı vardır ve burada liste ile ilgili genel bilgiler tutulur, head tail toplam node sayısı vb, C++ da burası zaten nesnenin kendisi, sen nesneyi yarattığında bu alan kurucu işlev tarafından ilklenir.
Node yapısında ne olacağını zaten biliyorsun.
sen asla node yaratmazsın, sen sadece nesnenin add metoduna, data yollarsın, mesela list.add(55), new işlemi add metodunda yapılır, yıkıcı işlev tüm node ları delete ile siler.
Özetle main içinde
List mylist;
mylist.add(55);
mylist.add(66);
list.walk();
vb şeklinde gitmesi lazım kodun, sen new delete node vs görmemelisin sınıfı kullanırken.
Anladim hocam.Cok sagol.