PDA

View Full Version : Giúp mình bài toán DSLK



khtndtvt
06-09-2009, 21:13
Mình vừa mới làm quen với C++,mới hiểu sơ sơ về mấy cái thủ tục hàm,vài bài toán đơn giản.Nhưng sang tới DSLK thì hết biết???Mình up đoạn code mình làm,các bạn đọc qua ai biết sai chỗ nào chỉ giúp mình.Thanks a lot!!!

#include <stdio.h>
#include <conio.h>
#include <malloc.h>

typedef int Data ;

typedef struct Node
{
Data Info ;
Node *Next ;
}NODE ;
Data x ;
NODE *pHead = NULL ,*pTail = NULL ;

NODE *GetNode (Data x)
{
NODE *p ;


p = new NODE ;

p ->Info = x;
p ->Next = NULL ;
if (pHead == NULL )
{
pHead = p;
pTail = p;
}
else
{
pTail ->Next = p ;
pTail = pTail ->Next ;
}
return p ;
}
//new_ele = GetNode(x);
Node *new_ele = GetNode(x);

void AddFirst(NODE *new_ele)
{
if (pHead == NULL )
{
pHead = new_ele ;
pHead = pTail ;//Ket thuc danh sach:
}
else
{
new_ele ->Next = pHead ;
pHead = new_ele;
}

}
void Out()
{
NODE *p;
//p = new NODE ;
p = pHead ;
while (p != NULL )
{
printf (" %d",p->Info);
p = p ->Next ;
}
}
void main ()
{
int n ;
NODE *p ;
Data x;

p = new NODE ;

printf ("So danh sach can nhap la: ");
scanf ("%d",&n);

for (p ->Info = 0;p ->Info <n ;p ->Info ++)
{
printf ("Nhap danh sach :");
scanf ("%d",&x);
GetNode (x);
}
printf ("Danh sach vua nhap gom co : \n\n");
Out() ;
printf ("\n");
printf ("Them vao dau danh sach :\n\nNhap phau tu can them : ");
scanf ("%d",&x);
AddFirst(new_ele) ;
printf ("Danh sach sau khi them: ");
Out() ;
getch() ;
}

Mình viết hàm thêm vào đầu của danh sách thấy đúng nhưng không hiểu sao xuất ra không được .Help me!!!

vanquyenhp
07-09-2009, 01:13
Mình viết hàm thêm vào đầu của danh sách thấy đúng nhưng không hiểu sao xuất ra không được .Help me!!!
Lần sau code bạn cho vào thẻ php cho dễ nhìn hơn nhé. Chứ code trong như thế người khác ngại đọc nên giúp cũng khó.
Đầu tiên mình viết cho bạn hàm khởi tạo danh sách liên kết (lúc đầu danh sách liên kết của bạn chưa có phần tử nào). Sau đó là hàm đưa thông tin ra màn hình, và cuối cùng là hàm thêm phần tử vào đầu danh sách.




#include <stdio.h>
#include <conio.h>
#include <malloc.h>

typedef int Data ;
typedef struct Node
{
Data Info ;
struct Node *Next ;
}NODE ;
NODE *head;
int i,n,x;

void khoitaodslk()//Ham khoi tao danh sach lien ket
{
NODE *p,*moi;
head=NULL;
for(i=0;i<n;i++)
{
moi=(node*)malloc(sizeof(node));
printf("Nhap vao x = ");scanf("%d",&x);
moi->Info=x;
if(head==NULL)
{
head=new;
p=new;
p->Next=NULL;
}
else
{
p->Next=moi;
p=moi;
p->Next=NULL;
}
}
}

void Duyet()//Duyet danh sach va xuat ra man hinh
{
NODE *p;
p = head;
while (p != NULL )
{
printf (" %d",p->Info);
p = p->Next;
}
}

void AddFirst()/Them phan tu moi vao dau ds
{
NODE *moi;
moi=(node*)malloc(sizeof(node));
printf("Nhap phan tu vao dau ds x=");
scanf("%d",&x);
moi->Info=x;
moi->Next=head;
head=moi;
}

Hàm main bạn chỉ càn nhập vào số phần tử của mảng là n, gọi hàm khởi tạo dslk,out và hàm chèn vào đầu danh sách(AddFirst)
Có gì không hiểu bạn cứ post lên diễn đàn, mình sẽ giải đáp.
Chúc thành công

freshgraduate09
07-09-2009, 14:10
hy vọng version này đơn giản, gọn gàng dễ hiểu hơn đối với bạn


#include <conio.h>
#include <stdio.h>
#include <mem.h>

typedef struct node
{
int data;
struct node *next;
}Node;

typedef Node *List;


// insert x after node p
void InsertAfter(List &head,List p, int &x)
{
List newp;
newp = new Node;
memcpy(&newp->data,&x,sizeof(int));
if(p==NULL)
{
newp->next = head;
head = newp;
}
else
{
newp->next = p->next;
p->next = newp;
}
}

// insert x at first of list
void InsertFirst(List &head,int &x)
{
InsertAfter(head,NULL,x);
}

// traverse on list
void ListTraverse(List head)
{
List cur = head;
while(cur!=NULL)
{
printf("\t %d ",cur->data);
cur=cur->next;
}
delete cur;
}


void main()
{
clrscr();

List L = NULL;

for(int i=0;i<5;i++)
InsertFirst(L,i);

ListTraverse(L);

getch();
}

khtndtvt
07-09-2009, 22:49
Cám ơn các bạn đã giúp đỡ nhưng bạn có thể ghi chú trên đoạn code (//)giải thích thêm về đoạn code cho dễ hiểu hơn được không?

freshgraduate09
07-09-2009, 22:54
èo, mình nghĩ bạn học khoa hoc tự nhiên điện tử viễn thông thì không phải comment mấy cái đó

http://en.wikipedia.org/wiki/Linked_list