Wednesday, May 11, 2016

Chương trình hằng đợi với danh sách liên kết đơn bằng C

#include<stdio.h>

#include<stdlib.h>

//Khai báo cấu trúc 1 nút
struct node
{
int infor;
struct node *link;
}*F=NULL,*R=NULL; //Khởi tạo

// Khai báo hàm
void QInsert(int X);
int QDelete();
int Empty();

// ===Chuong Trinh Chinh===
int main()
{
     // Bổ sung vào hàng đợi
        QInsert(1);
        QInsert(2);
        QInsert(3);
        QInsert(5);

//Hiện thị thông tin của hàng đợi
     printf("Cac so trong danh sach la: \n");
      while(!Empty())
            printf("%d\t\t",QDelete());
return 0;
}
// ==Định nghĩa hàm
// Hàm bổ sung một phần tử vào hằng đợi
void QInsert(int X)
{
    struct node *N;
     // Cấp phát bộ nhớ
     N=(struct node*)malloc(sizeof(struct node));
    N->infor=X;
    N->link=NULL;

      // Bổ sung
     if (F==NULL)
     {
         F=N;
         R=N;
     }
 else
    {
         R->link=N;
         R=N;
    }
}
//Hàm loại bỏ một 1 nút khỏi hàng đợi và trả về thông tin ở nút đó
int QDelete()
{
    int tg;
    struct node *P;

  if(F==NULL)
   {
       printf("Hang doi rong! ");
     return 0;
   }
    tg=F->infor;
     P=F;
     F=F->link;
  free(P); //Thu hồi bộ nhớ ,hủy nút

return tg;
}
//Hàm kiểm tra danh sách rỗng
int Empty()
{
    if(F==NULL)
         return 1;
     return 0;

}

Chương trình ứng ngăn xếp với danh sách liên kết đơn bằng C


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

//Khai báo cấu trúc 1 nút
struct node
{
int infor;
struct node *link;
}*T=NULL; //Khởi tạo T

// Khai báo hàm
void Push(int X);
int Pop();
int Empty();

// ===Chuong Trinh Chinh===
int main()
{
     // Bổ sung vào ngăn xếp
        Push(1);
        Push(2);
        Push(3);
        Push(4);
        Push(5);

//Hiện thị thông tin của ngăn xếp
printf("Cac so trong danh sach la: \n");
while(!Empty())
printf("%d\t\t",Pop());
return 0;
}
// ==Định nghĩa hàm
// Hàm bổ sung một phần tử vào ngăn xếp
void Push(int X)
{
struct node *N;
// Cấp phát bộ nhớ
N=(struct node*)malloc(sizeof(struct node));
N->infor=X;
N->link=NULL;

// Bổ sung
N->link=T;
T=N;

}
//Hàm loại bỏ một 1 nút khỏi ngăn xếp và trả về thông tin ở nút đó
int Pop()
{
int tg;
struct node *P;

if(T==NULL){
printf("Ngan xep rong! ");
return 0;
}

tg=T->infor;
P=T;
T=T->link;
free(P); //Thu hồi bộ nhớ ,hủy nút

return tg;
}
//Hàm kiểm tra danh sách rỗng
int Empty()
{
if(T==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ớ.!