Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn Phí
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Diễn đàn hỏi đáp học thuật - Download Tài Liệu Miễn PhíĐăng Nhập

VỮNG TIN - TIẾP BƯỚC - THÀNH CÔNG


descriptionGiải đề thi CTDL&GT EmptyGiải đề thi CTDL&GT

more_horiz
Bài 1: Xét một cấu trúc dữ liệu gọi là ArrayList bao gồm một danh sách liên kết đơn để lưu các phần tử, Head và Tail là các con trỏ tương ứng chỉ đến phần tử đứng đầu cà phàn tử cuối của danh sách và Size để chỉ số lượng phần tử trong danh sách.








Các anh chi hãy (đề nghị sử dụng đúng tên hàm/ thủ tục)
Câu 1: Viết các khai báo cho CTDL ArrayList trên để lưu các phần tử có kiểu dữ liệu là số nguyên.
Câu 2: Viết thủ tục Init để tạo một ArrayList rỗng.
Câu 3: Viết hàm Size để trả về kích thước hiện hành của một ArrayList.
Câu 4: Viết thủ tục Put để thêm một phần tử vào cuối ArrayList.
Câu 5: Viết hàm Get để trả về phần tử ở vị trí thứ i của một ArrayList.
Câu 6: Viết thủ tục Remove để xóa phần tử ở vị trí thứ i của một ArrayList.
(Vị trí I xem như hợp lệ đối với hàm Get và thủ tục Remove)
Giải:
/*
De thi sau dai hoc 2010
bai 1:*/

Code:

#include <conio.h>
#include <stdio.h>
#include <alloc.h>
typedef int DataType;
typedef struct Node{
   DataType Data;
   Node* Next;
};
typedef Node* ArrayList;
typedef Node* Position;
void Init(ArrayList *A)
{
   (*A)=NULL;
}
int Size(ArrayList A)
{
   if (A==NULL) return 0;
   else
   {
      int temp=0;
      while (A!=NULL)
         {
            temp++;
            A=A->Next;
         }
      return temp;
   }
}
void Put(DataType x, ArrayList *A)
{
   if ((*A)==NULL)
   {
      (*A)=(Node*)malloc(sizeof(Node));
      (*A)->Data=x;
      (*A)->Next=NULL;
   }
   else
   {
   ArrayList T;
   T=(*A);
   while (T->Next!=NULL)
      T=T->Next;   
   ArrayList L;
   L=(Node*)malloc(sizeof(Node));
   L->Data=x;
   L->Next=NULL;
   T->Next=L;
   }
}
void ReadArray(ArrayList *A)
{
   DataType n;
   Init(A);
   do {
      printf("\nNhap n=");
      scanf("%d",&n);
      if (n!=0)
         Put(n,A);
   }
   while (n!=0);
}
void PrintArray(ArrayList A)
{
   while (A!=NULL)
      {
         printf("%d ",A->Data);
         A=A->Next;
      }
}
DataType Get (Position P, ArrayList A)
{
   if (P!=NULL)
      return P->Data;
   else
      return 0;
}
void Remove(Position P, ArrayList *A)
{
   Position T;
   T=P;
   P=P->Next;
   free(T);
}
Position Search(DataType x,ArrayList A)
{
   if (A==NULL) return NULL;
   else
   {
      int found=0;
      Position T=A;
      while (T!=NULL && found==0)   
         if (x==T->Data)
            found=1;
         else
            T=T->Next;
      return T;
   }
}
void main()
{
   ArrayList A;
   ReadArray(&A);
   PrintArray(A);
   printf("\nKich thuoc hien hanh cua mot arraylist la: %d",Size(A));
   printf("\nNhap x=");
   DataType x;
   scanf("%d",&x);
   Position T=Search(x,A);
   Remove(T,&A);
   PrintArray(A);
   
   getch();
   
}

Admin xem dùm bài này mình giải có đúng ko? Góp ý dùm e he! Thanks

descriptionGiải đề thi CTDL&GT EmptyRe: Giải đề thi CTDL&GT

more_horiz
Theo tôi nghĩ, ý bài toán là mình phải cài đặt danh sách liên kết đơn bằng mảng.

descriptionGiải đề thi CTDL&GT EmptyRe: Giải đề thi CTDL&GT

more_horiz
Hình như đề đầy đủ là như thế này:
https://2img.net/r/ihimg/photo/my-images/72/37755089.png
Giải đề thi CTDL&GT 37755089
Và bài giải này phải thêm con trỏ Header đầu

Code:

#include <conio.h>
#include <stdio.h>
#include <alloc.h>
typedef int DataType;
typedef struct Node{
   DataType Data;
   Node* Next;
};
typedef Node* ArrayList;
typedef Node* Position;
void Init(ArrayList *A)
{
   (*A)=(Node*)malloc(sizeof(Node));
   (*A)->Next=NULL;
}
int Size(ArrayList A)
{
   if (A->Next==NULL) return 0;
   else
   {
      int temp=0;
      while (A->Next!=NULL)
         {
            temp++;
            A=A->Next;
         }
      return temp;
   }
}
void Put(DataType x, ArrayList *A)
{

   ArrayList T;
   T=(*A);
   while (T->Next!=NULL)
      T=T->Next;   
   ArrayList L;
   L=(Node*)malloc(sizeof(Node));
   L->Data=x;
   L->Next=NULL;
   T->Next=L;
   
}
void ReadArray(ArrayList *A)
{
   DataType n;
   Init(A);
   do {
      printf("\nNhap n=");
      scanf("%d",&n);
      if (n!=0)
         Put(n,A);
   }
   while (n!=0);
}
void PrintArray(ArrayList A)
{
   while (A->Next!=NULL)
      {
         printf("%d ",A->Next->Data);
         A=A->Next;
      }
}
DataType Get (Position P, ArrayList A)
{
   if (P!=NULL)
      return P->Next->Data;
   else
      return 0;
}
void Remove(Position P, ArrayList *A)
{
   Position T;
   T=P->Next;
   P->Next=P->Next->Next;
   free(T);
}
Position Search(DataType x,ArrayList A)
{
   if (A->Next==NULL) return NULL;
   else
   {
      int found=0;
      Position T=A;
      while (T->Next!=NULL && found==0)   
         if (x==T->Next->Data)
            found=1;
         else
            T=T->Next;
      return T;
   }
}
void main()
{
   ArrayList A;
   ReadArray(&A);
   PrintArray(A);
   printf("\nKich thuoc hien hanh cua mot arraylist la: %d",Size(A));
   printf("\nNhap x=");
   DataType x;
   scanf("%d",&x);
   Position T=Search(x,A);
   Remove(T,&A);
   PrintArray(A);
   getch();
}

Admin xem như thế nào nhé!

descriptionGiải đề thi CTDL&GT EmptyRe: Giải đề thi CTDL&GT

more_horiz
Cách cài đặt của bạn như vậy cũng được. Nếu như bạn giải đề ĐHCT thì phải theo bài lập trình mẫu đã có.

descriptionGiải đề thi CTDL&GT EmptyRe: Giải đề thi CTDL&GT

more_horiz
Lập trình mẫu sẵn có là sao vậy Admin. Là mấy bài mẫu trong cài đặt danh sách liên kết đơn ah. Nếu không cài đặt tương đương thì có sao không Admin.
Admin có các đề thi qua các năm của ngành hệ thống thông tin không cho thu_thaospkt xin với. từ 2010-nay đó. Cám ơn Admin nhiều.

descriptionGiải đề thi CTDL&GT EmptyRe: Giải đề thi CTDL&GT

more_horiz
privacy_tip Permissions in this forum:
Bạn không có quyền trả lời bài viết
power_settings_newLogin to reply