Showing posts with label Danh sách liên kết kép. Show all posts
Showing posts with label Danh sách liên kết kép. Show all posts

Saturday, May 21, 2016

Chương trình chuyển đổi 1 số nguyên dương sang dạng nhị phân sử dụng ngăn xếp cài đặt bằng danh sách liên kết kép bằng ngôn ngữ C

//Ho va ten: Tran Van Linh
//Msv:581597
//Lop:K58QLTT

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

//Khai bao cau truc
struct node
{
          int infor;
          struct node *left;
          struct node *right;
} *T=NULL;

//khai bao ham
void push(int x);
int pop();
int empty();

//==chuong trinh chinh==
int main()
{
          int n,thuong;
         
          printf("Nhap so nguyen can chuyen sang dang nhi phan:");
          do
          {
                   scanf("%d",&n);
                   if(n<0)
                             printf("\nSo nguyen nhap phai duong,nhap lai: ");
          }while(n<0);
         
          thuong=n;
         
          while(thuong)
          {
                   push(thuong%2);
                   thuong/=2;
          }
         
          printf("\nDang nhi phan cua %d la:",n);
          while(!empty())
                   printf("%d",pop());
          return 0;
}
//==Dinh nghia ham==
void push(int x)
{
          struct node *N;
          N=(struct node*)malloc(sizeof(struct node));
          N->infor=x;
          N->left=NULL;
          N->right=NULL;
         
          //bo sung vao dinh ngan xep
          if(T==NULL)
                   T=N;
          else
          {
                   N->right=T;
                   T->left=N;
                   T=N;
          }
}
//-------------
int pop()
{
          int tg;
          struct node *P;
         
          if(T==NULL)
          {
                   printf("Danh sach rong.!");
                   return 0;
          }
          tg=T->infor;
          P=T;
          if(T->right==NULL) //Trường hợp ds chỉ có 1 nút
          {
                   T=NULL;
          }
          else
          {
                   T=T->right;
                   T->left=NULL;
          }
          free(P);
          return tg;
}
//-------------
int empty()
{
          if(T==NULL)
                   return 1;
          return 0;
}

//-------------

Giải thuật chuyển 1 số nguyên dương sang dạng nhị phân sử dụng ngăn xếp cài đặt bằng danh sách liên kết kép

//Họ Tên: Trần Văn Linh
// Msv:581597
//Lớp:K58QLTT

A.   Giải thuật chương trình chính
Program ChuyenDoiNhiPhan;
1, read(n);
2, while n <> 0 do
    Begin
              Tg:=n mod 2;
              Call Push(Tg);
              n:= n /2;
    end
3, while Empty(T) <>TRUE do write(Pop());
End.

B.   Thủ tục bổ sung vào ngăn xếp cài đặt bằng danh sách liên kết kép
Vào : Ngăn xếp (T,X);
Ra:  Không có;
{Thủ tục này bổ sung phân tử dữ liệu X vào ngăn xếp (T) có T là nút đỉnh ngăn xếp cài đặt bằng danh sách liên kết kép ;}

Procedure       Push(var:T,x)
1,{Tao nút mới }
    new<=AVAIL;
    infor(new):=x;
    left(new):= Ø;
    right(new):= Ø;
2,{ Bổ dung vào ngăn xếp}
If T =Ø then    { trường hợp danh sách rỗng}
    T:= new;
Else
    Begin
              right(new):=T;
              left(T):=new;
              T:=new;
    End
Return

C.   Hàm loại bỏ một phần tử ở đỉnh ngăn xếp
Vào :Ngăn xếp (T);
Ra: Trả phần tử dữ liệu của nút bị loại bỏ.
{Hàm này loại bỏ phần tử của đỉnh ngăn xêp(T) có T là đỉnh ngăn xếp và trả về phần tử loại bỏ;}

Function Pop(var: T)
1,{Kiem tra danh sach rong};
    If T=Ø then begin
                                          Write(‘Danh sach rong.!’);
                                          Return ;
                                 End;
2,{Loại bỏ phần tử đỉnh ngăn xếp}
    Tg:=INFOR(T);
    P:=T;
    If right(T)= Ø  then {Trường hợp danh sách chỉ còn 1 node }
T:= Ø
    Else
              Begin
                       T:=right(T);
                       left(T):= Ø;
              End;
              P=>AVAIL;
3, Pop:=Tg;
Return;

D.   Hàm kiểm tra ngăn xếp rỗng
Vào: ngăn xếp (T);
Ra :TRUE nếu ngăn xếp rỗng , FALSE nếu ngăn xếp chưa rỗng.
{hàm này kiểm tra ngăn xếp rỗng, ngăn xếp được cài đặt bằng danh sách liên kép}

Function  Empty(T)
If T= Ø  then 
Empty:=TRUE;
else
         Empty:=FALSE; 

Saturday, May 14, 2016

Chương trình chuyển một số nguyên dương thành xâu nhị phân sử dụng danh sách liên kết kép

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

----------------------------------------------------------------------------------------------------------------------------------



#include<stdio.h>


#include<stdlib.h>

//khai bao cau truc
struct node
{
int infor;
struct node *left;
struct node *right;
} *L=NULL,*R=NULL;

//khai bao ham
void Insert(int x);// chen mot nut
int Delete();//xoa mot nut
int empty();//kiem tra danh sach rong

//==chuong trinh chinh==
int main()
{
int n,thuong;
printf("Nhap so nguyen can chuyen sang dang nhi phan:");
do
{
scanf("%d",&n);
if(n<0)
printf("\nSo nguyen nhap phai duong,nhap lai: ");
}while(n<0);
thuong=n;
while(thuong)
{
Insert(thuong%2);
thuong/=2;
}
printf("\n%d chuyen sang dang nhi phan la:",n);
while(!empty())
printf("%d",Delete());
return 0;
}
//==Dinh nghia ham==
void Insert(int x)
{
struct node *N;
N=(struct node*)malloc(sizeof(struct node));
N->infor=x;
N->left=NULL;
N->right=NULL;
//bo sung vao dinh ngan xep
if(L==NULL)
{
L=N;
R=N;
}
else
{
N->right=L;
L->left=N;
L=N;
}
}
//-------------
int Delete()
{
int tg;
struct node *P;
if(L==NULL)
{
printf("Danh sach rong.!");
return 0;
}
tg=L->infor;
P=L;
if(L->right==NULL)
{
L=NULL;
}
else
{
L=L->right;
L->left=NULL;
}
free(P);
return tg;
}
//-------------
int empty()
{
if(L==NULL)
return 1;
return 0;
}
//-------------

Tuesday, May 10, 2016

NGĂN XẾP VỚI DANH SÁCH LIÊN KẾT KÉP

Khi cài đặt ngăn xếp bằng danh sách liên kết kép , mỗi phần tử của ngăn xếp sẽ được lưu trữ trong một nút có cấu trúc nút trong danh sách liên kết kép.
        
       +,Left: Con trỏ trái chứa địa chỉ nút đứng trước
      +, Right: Con trỏ phải chứa địa chỉ nút đứng sau.
      +, INFOR: thông tin của phần tử dữ liệu

Với cách lưu trữ này nút đỉnh ngăn xếp chính là nút đầu tiên của danh sách. Do đó phép loại bỏ, bổ sung sẽ thực hiện ở nút đầu danh sách .







A. Thủ tục bổ sung một phần tử vào ngăn xếp.

Procedure   PUSH(T,X)
1,{tạo nút mới}
new <=AVAIL;//để biểu thị việc cấp phát bộ nhớ cho new
INFOR(new):=X;
Left(new):=null;
Right(new):=null;
2,{Bổ sung}
if T=null  then
    T:=new;
else
  begin
       Right(new):=T;
       Left(T):=new;
       T:=new;
  end
3.Return;

B. Thủ tục loại bỏ một phần tử khỏi ngăn xếp

Fucntion POP(T)
1.{ Kiểm tra hàng đợi rỗng}
   if T=null  then
   begin
          Write("Hàng đợi rỗng");
          Return;
   end
2.{Loại bỏ}
P:=T;
tg:=INFOR(T);
{Trường hợp chỉ còn một nút}
if Right(T)=null then
     T:=null;
else
begin
       T:=Right(F);
       Left(T):=null;
end
3.{Xóa bỏ nút thu hồi bộ nhớ }
P=>AVAIL;
4.POP:=tg;
5,Return;

Lưu ý : P=>AVAIL, P<=AVAIL để biểu thị việc thu hổi và cấp phát bộ nhớ.!



HĂNG ĐỢI VỚI DANH SÁCH LIÊN KẾT KÉP.

Danh sách liên kết kép là danh sách tuyến tính khi sử dụng cấu trúc lưu trữ là phân tán. Mỗi nút trong danh sách liên kết kép gồm có  3 trường :
       

     +, Left: Con trỏ trái chứa địa chỉ nút đứng trước
      +,Right: Con trỏ phải chứa địa chỉ nú đứng sau.
      +, INFOR: thông tin của phần tử dữ liệu




Khi cài đặt hàng đợi bằng danh sách liên kết kép thì phép bổ sung sẽ thực hiện ở nút cuối danh sách và loại bỏ ở nút đầu danh sách.



A. Thủ tục bổ sung một phần tử dữ liệu vào hàng đợi

Procedure    QINSERT(F,R,X)

1,{tạo nút mới}
new <=AVAIL;//để biểu thị việc cấp phát bộ nhớ cho new
INFOR(new):=X;
Left(new):=null;
Right(new):=null;
2,{Bổ sung}
if F=null  then
 F:=R:=new;
else
  begin
      Right(R):=new;
      Left(new):=R;
       R:=new;
  end
3.Return;

B.Thủ tục bổ sung loại bỏ một phần tử dữ liệu khỏi hằng đợi

Fucntion QDELETE(F,R)

1.{ Kiểm tra hàng đợi rỗng}
   if F=null  then
   begin
          Write("Hàng đợi rỗng");
          Return;
   end
2.{Loại bỏ}
P:=F;
tg:=INFOR(F);
{Trường hợp chỉ còn một nút}
if F=R then
     F:=R:=null;
else
begin
       F:=Right(F);
       Left(F):=null;
end
3.{Xóa bỏ nút thu hồi bộ nhớ }
P=>AVAIL;
4.QDELETE=tg;
5,Return;

Lưu ý : P=>AVAIL, P<=AVAIL để biểu thị việc thu hổi và cấp phát bộ nhớ.!