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

Friday, May 20, 2016

Chương trình thêm tìm kiếm một mặt hàng sử dụng danh sách liên kết đơn bằng C

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



#include<stdio.h>


#include<stdlib.h>
#include<string.h>



//==Khai bao cau truc


typedef struct mathang mathang;
struct mathang
{
char maMH[10];//mã mặt hàng
char tenMH[256];//tên mặt hàng
float gia;//Giá của mặt hàng
int soLuong;//Số lượng của mặt hàng
};
typedef struct node node;
struct node
{
mathang infor;
node *link;
}*F=NULL;

//Khai bao ham
void inSert(mathang infor);// Hàm bổ sung một mặt hàng vào ds
void  Search(char maMH[]);//Hàm tìm kiếm một mặt hàng 
void Delete();//Hàm xóa mặt hàng ở cuối ds
void in();//Hàm hiện tất cả các mặt hàng có trong ds

//===Chuong trinh chinh===
int  main()
{
mathang matHang;
char maMH[10];
char tl;



do
{
fflush(stdin);
printf("Nhap ma mat hang: ");
gets(matHang.maMH);
printf("Nhap ten mat hang: ");
gets(matHang.tenMH);
printf("Nhap so luong: ");
scanf("%d",&matHang.soLuong);
printf("Nhap gia: ");
scanf("%f",&matHang.gia);
fflush(stdin);

inSert(matHang);

printf("Co nhap nua khong (c/k):");
scanf("%c",&tl);
}while(tl=='c'||tl=='C');
printf("\n\nDanh sach da nhap la: \n");
in();
Delete();
printf("\n\nDanh sach sau khi xoa: \n");
in();
printf("\n\nNhap ma mat hang ban can tim kiem: ");
scanf("%s",&maMH);
Search(maMH);
return 0;
}
//----Dinh nghia ham----
void inSert(mathang infor)
{
node *N;
N=(node*)malloc(sizeof(node));
N->infor=infor;
N->link=NULL;
//bo sung
N->link=F;
F=N;
}
//-----------------------------------------------
void  Search(char  maMH[])
{
node *P,*Q;
P=F;
mathang tim;
strcpy(tim.maMH,"");
strcpy(tim.tenMH,"");

     //Tìm node có mã mặt hàng là maMH
while(P)
{
if((strcmp(P->infor.maMH,maMH))==0)
{
tim=P->infor;
break;
}
P=P->link;
}

if((strcmp(tim.tenMH,""))==0)
{
printf("Mat hang khong tim thay");
return;
}

printf("Ma mat hang: %s\n",tim.maMH);
printf("Ten ten mat hang: %s\n",tim.tenMH);
printf("Ma so luong: %d\n",tim.soLuong);
printf("Ten gia: %f\n\n",tim.gia);
}
//-----------------------------------------------------------
void Delete()
{
node *P;
node *Q;
P=F;
       //Tìm nút cuối danh sách
while(P)
{
if(P->link==NULL)
break;
Q=P;
P=P->link;
}

if(P)
{
if(P==F)//Trường hợp danh sách chỉ có 1 nút
F=F->link;
else
{
Q->link=P->link;
}
free(P);
}
}
//-------------------------------------------------------------------
void in()
{
node *P;
P=F;
while(P)
{
printf("Ma mat hang: %s\n",P->infor.maMH);
printf("Ten mat hang: %s\n",P->infor.tenMH);
printf("So luong: %d\n",P->infor.soLuong);
printf("Gia: %f\n\n",P->infor.gia);
P=P->link;
}
}



Kết quả khi test chương trình :





Sunday, May 15, 2016

Giải thuật thêm,xóa ,tim kiếm một nút vào danh sách liên kết đơn

//Họ và tên :Trần Văn Linh
//MSV:581597
//Lớp:K58QLTT

---------------------------------------------------------------------------------
A.Giải thuật thêm một nút vào danh sách liên đơn
Bài này mình sẽ giới thiệu 3 trường hợp bổ sung trong danh sách liên kết đơn.
Mình sẽ dùng 2 biến con trỏ F, R là nút đầu tiên, nút cuối cùng của danh sách.

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

TH1. Giải thuật bổ sung vào nút đầu tiên
 - Vào :Phần tử dữ liệu x
 -  Ra: Không có

procedure Insert(F,X)
1,{Tạo nút mới}
      new <=AVAIL;
    infor(new):=X;
    Link(new):=null;
2,{Bổ sung}
   Link(new):=F;
   F:=new;
3,{Kết thúc}
Return.

TH2. Giải thuật bổ sung vào sau nút M
  -Vào :M,X
  -Ra: Không có

procedure Insert(F,M,X)
1,{Tạo nút mới}
      new <=AVAIL;
    infor(new):=X;
    Link(new):=null;
2,{Bổ sung}
 {Trường hợp danh sách rỗng}
  if F=null then
      F:=new;
  else
  begin
        Link(new):=Link(M);
        Link(M):=new;
  end
3,{Kết thúc}
Return.

TH3. Giải thuật bổ sung vào nút cuối cùng

procedure Insert(F,R,M,X)
1,{Tạo nút mới}
      new <=AVAIL;
    infor(new):=X;
    Link(new):=null;
2,{Bổ sung}
 {Trường hợp danh sách rỗng}
  if F=null then
                    begin
                          F:=new;
                          R:=new;
  else
  begin
        Link(R):=new;
        R:=new;
  end
3,{Kết thúc}
Return. 

B. Giải thuật tiềm kiếm một nút trong danh sách liên đơn khi biết trường thông tin.

 Vào :F,thông tin nút cần tìm kiếm 
 Ra: Nút cần tìm kiếm

 Function Search(F,X)
 1{Kiểm tra danh sách rỗng}
   if F=null
   begin
        write('Danh sách rỗng');
        return;{kết thúc}
   end
 2,{Tìm kiếm}
   P:=F;
   while P#null Do
   begin
        if infor(P)=X
         begin
              Q:=P;{nút tìm thấy}
              return;{Dừng vòng lặp,thay cho lệnh break trong C}
        end;
         P=Link(P);
   end
3,{Kiểm tra xem có tồn tại nút cần tìm không?}
 if Q=null
 begin
      write('Không tồn tại nút cần tìm kiếm.!');
      return;{Kết thúc}
 end
else
    Search:=Q;{Trả về nút được tìm thấy}
4,{Kết thúc}
Return.

C. Giải thuật xóa một nút có trường thông tin là x trong danh sách liên kết đơn.
Vào:F,X
Ra: Không có

Procedure    Delete(F,X)
1{Kiểm tra danh sách rỗng}
   if F=null
   begin
        write('Danh sách rỗng');
        return;{kết thúc}
  end
2,{Tìm nút cần xóa}
 P:=F;
 while P# null Do
 begin
       if infor(P)=X then
            return;{Dừng vòng lặp,thay cho lệnh break trong C}
      Q:=P;
      P:=Link(P);{nút cần xóa}
 end
3,{xóa bỏ}
if P # null
begin
     if P=F then
           F=Link(F);
     else
     begin
          Link(Q):=Link(P);
     end
  P=>AVAIL;{Thu hồi bộ nhớ}
end
4,{Kết thúc}
Return.

Saturday, May 14, 2016

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

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

-------------------------------------------------------------------------------------------------------------------------
xaunhiphan.c
#include<stdio.h>
#include<stdlib.h>

    //khai bao cau truc
typedef struct node node;
struct node
{
int infor;
node *link;
} *T=NULL;

//Khai bao ham
void push(int x);//Hàm bổ sung 
int pop();//Hàm xóa một nút
int empty();//Hàm kiểm tra danh sách rỗng

//==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("\n%d chuyen sang dang nhi phan la:",n);
while(!empty())
printf("%d",pop());
return 0;
}
//==Dinh nghia ham==
void push(int x)
{
node *N;
N=(node*)malloc(sizeof(node));
N->infor=x;
N->link=NULL;
//bo sung vao dinh ngan xep
N->link=T;
T=N;
}
//-------------
int pop()
{
int tg;
node *P;
if(T==NULL)
{
printf("Danh sach rong.!");
return 0;
}
P=T;
tg=T->infor;
T=T->link;
free(P);
return tg;
}
//-------------
int empty()
{
if(T==NULL)
return 1;
return 0;
}

Friday, May 13, 2016

Tìm kiếm, xóa mặt hàng trên danh sách mặt hàng lưu trong danh sách liên kết đơn bằng C


Lưu ý: Bài này mình làm với mặt hàng đơn giản chỉ có hai thuộc tính là mã và tên, mọi người cần thêm đầy đủ các thuộc tính của một mặt hàng cần có như giá , số lượng, .....! 
-------------------------------------------------------------------------------------------------------------------------
Code quảng cáo của bạn ở đây

mathang.c

//Ho và tên:Trần Văn Linh
//Msv:581597
//Lớp:K58QLTT

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

//==Khai bao cau truc
typedef struct mathang mathang;
struct mathang
{
int maMH;
char tenMH[256];
};
typedef struct node node;
struct node
{
mathang infor;
node *link;
}*F=NULL,*R=NULL;
//Khai bao ham
void inSert(mathang infor);// hàm chèn một nút
void  Search(int maMH);//Hàm tìm kiếm một mặt hàng với mã mặt hàng
void Delete(int maMH); //Hàm xóa một một mặt hàng với mã mặt hàng
void in();//Ham in ra danh sach các mặt hàng
//Chuong trình chính
int  main()
{
mathang mh;
int maMH;
char tl;
do
{
printf("Nhap ma mat hang: ");
scanf("%d",&mh.maMH);
fflush(stdin);//Xóa bộ đệm

printf("Nhap ten mat hang: ");
gets(mh.tenMH);
inSert(mh);//Bổ sung

printf("Co nhap nua khong (c/k):");
scanf("%c",&tl);
}while(tl=='c'||tl=='C');
printf("\n\nDanh sach da nhap la: \n");
in();
printf("\n\nNhap ma mat hang ban can xoa: ");
scanf("%d",&maMH);
Delete(maMH);
printf("\n\nDanh sach sau khi xoa: ");
in();
printf("\n\nNhap ma mat hang ban can tim kiem: ");
scanf("%d",&maMH);
Search(maMH);
return 0;
}
//--Dinh nghia ham
void inSert(mathang infor)
{
node *N;
N=(node*)malloc(sizeof(node));
N->infor=infor;
N->link=NULL;
//Bổ sung
N->link=F;
F=N;
}
//---------------------
void  Search(int maMH)
{
node *P;
P=F;
mathang tim;
      tim.maMH=0;
      strcpy(tim.tenMH,"");

while(P)
{
if(P->infor.maMH==maMH)
{
tim=P->infor;
break;
}
P=P->link;
}
    if(strcmp(tim.tenMH,"")==0)
    {
   printf("Mat hang khong ton tai");
   return;
    }
printf("Ma mat hang: %d\n",tim.maMH);
printf("Ten mat hang: %s",tim.tenMH);
}
//--------------------------
void Delete(int maMH)
{
node *P;
node *Q;
P=F;

while(P)
{
if(P->infor.maMH==maMH)
break;
Q=P;
P=P->link;
}

if(P)
{
if(P==F)//Trường hợp mặt hàng  cần xóa ở nút đầu tiên
F=F->link;
else
{
Q->link=P->link;
}
free(P);
}
}
//---------------------------------------------------------------------
void in()
{
node *P;
P=F;
while(P)
{
printf("Ma mat hang: %d\n",P->infor.maMH);
printf("Ten mat hang: %s\n\n",P->infor.tenMH);
P=P->link;
}
}

Lưu ý: Bài này mình làm với mặt hàng đơn giản chỉ có hai thuộc tính, mọi người cần thêm đầy đủ các thuộc tính của một mặt hàng cần có như giá , số lượng, .....! 

Chương trình cài đặt hằng đợi theo danh sách liên kết đơn bằng C++

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

--------------------------------------------------------------------------------------------------------------------------
hangdoi.cpp
#include<iostream>

using namespace std;

//Khai bao lop
class hangdoi
{
private:
struct node
{
int info;
node *link;
}*F,*R;
public:
hangdoi();
~hangdoi();
void cqinsert(int &x);
int cqdelete();
};
//===Chuong trinh chinh===
int main()
{
hangdoi ds;
int i,n;
int a[50];

cout<<"Nhap so luong so nguyen:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Nhap phan tu thu "<<i<<" :"<<endl;
cin>>a[i];
ds.cqinsert(a[i]);
}

cout<<"Danh sach so da nhap la:"<<endl;
for(i=0;i<n;i++)
cout<<ds.cqdelete()<<" ";

return 0;
}
//Dinh nghia ham
hangdoi::hangdoi():F(NULL),R(NULL)
{

}
//--------------
hangdoi::~hangdoi()
{
node *P;
while(F)
{
P=F;
F=F->link;
delete P;
}
}
//--------------
void hangdoi::cqinsert(int &x)
{
node *N;
N= new node;
N->info=x;
N->link=NULL;

if(F==NULL)
{
F=N;
R=N;
}
else
{
R->link=N;
R=N;
}
}
//--------------
int hangdoi::cqdelete()
{
node *P;
int y;

P=F;
if(F==NULL)
{
cout<<"hang doi rong.!";
return 0;
}

y=F->info;
F=F->link;
delete P;
return y;
}
//--------------

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;

}