Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

cau truc du lieu

Hoán vị ma trận thưa

Program hv;

Var m,n,i,j,k,q,hang,cot:integer;

a,b:array[1..100,1..3] of integer;

f,f1:file of integer;

chon:char;

begin

writeln('nhap ma tran A');

write('so hang(m) :')

readln(m);

write('so cot(n):');

readln(n);

write('so phan tu khac 0(q) :');

readln(q);

a[1,1]:=m; a[1,2]:=n; a[1,3]:=q;

for i:=2 to q+1 do

begin

write('a[',i,'1]= ');readln(a[i,1]);

write('a[',i,'2]= ');readln(a[i,2]);

write('a[',i,'3]= ');readln(a[i,3]);

end;

writeln('hoan vi ma tran:');

b[1,2]:=m; b[1,1]:=n; b[1,3]:=q;

k:=2;

for cot:=1 to n do {n ở đây là 3}

for hang:=2 to q+1 do

if a[hang,2] = cot then

begin b[k,1] := a[hang,2];

b[k,2] := a[hang,1];

b[k,3] := a[hang,3];

k:=k+1

end;

writeln('hien ket qua hoan vi:');

for i:=1 to q+1 do

begin

for j:=1 to 3 do

write('!',b[i,j],'!');

writeln;

end;

readln;

end.

Thư viện ngăn xếp STACK

Tệp stack.tpu

UNIT STACK;

INTERFACE TYPE

StackElement=integer;

PointerType=^StackNode;

StackNode=record

Du_Lieu: StackElement;

Next: PointerType;

end;

StackType= PointerType;

Procedure CreateS(Var Stack: StackType);

Function EmptyS(Stack: StackType):Boolean;

Procedure PoP(Var Stack: StackType;var Item:StackElement);

Procedure Push(Var Stack: StackType; Item:StackElement);

IMPLEMENTATION

Procedure CreateS(Var Stack: StackType); (*tạo ngăn sếp rỗng*);

Begin Stack:= Nil end;

Function EmptyS(Stack: StackType):Boolean;

Begin EmptyS:= (Stack = Nil) end;

Procedure Push(Var Stack: StackType;Item:StackElement);

(*đẩy item vào ngăn xếp*)

Var TempPtr:PointerType;

Begin

New(TempPtr);

TempPtr^.Du_Lieu:=Item;

TempPtr^.Next:= Stack;

Stack:=TempPtr;

End;

Procedure Pop(Var Stack: StackType; Var Item:StackElement);

(* lấy item ra từ đỉnh ngăn xếp Stack*)

Var TempPtr:PointerType; (* TempPtr - con trỏ tạm thời chỉ đến nút đỉnh Stack *)

Begin

If EmptyS(Stack) then halt

Else

Begin Item:= Stack^.Du_Lieu;

TempPtr:=Stack;

Stack:= Stack^.Next;

Dispose(TempPtr);

End;

End(*pop*);

End.

Ví dụ ngăn sếp Stack:

Bài toán đổi cơ số 10 sang cơ số 2:

Program doicoso;

Uses dos;

const stacklimit=50;

type Kieu_Ptu=integer;

Day_Nganxep=array[1..stacklimit] of Kieu_Ptu;

Kieu_Nganxep= record

top:0..stacklimit;

phantu:Day_Nganxep;

end;

var so,sodu:integer;

stack: Kieu_Nganxep;

traloi: char;

procedure thietlap(Var stack : Kieu_Nganxep);

begin stack.top :=0

end;

function IsEmpty(stack : Kieu_Nganxep) :boolean;

begin IsEmpty := (stack.top = 0) end;

procedure Top(var stack :Kieu_Nganxep; var Item : Kieu_Ptu);

begin if IsEmpty(stack) then halt

else with stack do

begin Item := Phantu[top];

top :=top - 1

end

end;

procedure Them(var stack :Kieu_Nganxep; Item : Kieu_Ptu);

begin if stack.top = stacklimit then halt

else with stack do

begin top := top+1;

phantu[top] := Item

end

end;

begin (*chuong trinh chinh *)

repeat

write('dua vao so can doi :');

readln(so);

thietlap(stack);

while so <> 0 do

begin sodu := so mod 2;

them(stack,sodu);

so := so div 2

end;

writeln('bieu dien co so 2 :');

while not IsEmpty(stack) do

begin top(stack, sodu);

write(sodu:1);

end;

readln;

write('co lam tiep ko? (y/n)');

readln(traloi);

until not (upcase (traloi) = 'Y')

end.

Thư viện hàng đợi QUEUE

thủ tục thiết lập hàng đợi:

Procedure CREATEQ(var Q: array[1..n] of item; {n là const}

front, rear: 0..n;

Begin front:=0; rear:=0 end;

kiểm tra hàng có rỗng ko:

Function ISEMPTY(Q);

Begin

ISEMPTY:= (front = rear);

end;

cho phần tử ở đầu của hàng đợi:

procedure FRONT(Q);

begin if ISEMPTY then Halt

else front:= front +1

end;

thủ tục thêm phần tử vào hàng đợi

procedure ADDQ(item: Kieu_Ptu);

begin if rear =n then

writeln('hàng đầy');

else begin

rear:= rear +1;

Q[rear]:= item;

end;

end;

lấy phần tử ra khỏi hàng đợi:

procedure DELETEQ(var item: Kieu_Ptu);

begin if front = rear then(* hàng rỗng*) Halt Else

begin

front:= front + 1;

Item:= Q[front];

end;

end;

tệp queue.pas

UNIT QUEUE;

INTERFACE TYPE

QueueElement=integer;(*co the thay doi*)

QueuePtr=^QueueNode;

QueueNode=record

Du_Lieu: QueueElement;

next: QueuePtr;

end;

QueueType= record

front, rear : QueueType;

end;

procedure CreateQ(var Queue : QueueType);

Funtion EmptyQ(Queue : QueueType) :boolean;

procedure AddQ(var Queue: QueueType; Item: QueueElement);

procedure RemoveQ(var Queue: QueueType; var Item:QueueElement);

IMPLEMENTATION

procedure CreateQ(var Queue: QueueType);

begin Queue.front := Nil;

Queue.rear := Nil;

end;

function EmptyQ(Queue : QueueType) :boolean;

begin EmptyQ:= (Queue.front = Nil) and (Queue.rear = Nil) end;

procedure AddQ(var Queue: QueueType; Item:QueueElement);

var Pt: QueuePtr;

begin

New(Pt);

Pt^.Du_Lieu := Item;

With Queue Do

if EmptyQ(Queue) then

Begin

front := Pt;

rear := Pt

end

else

begin rear^.next := Pt;

rear := Pt

end;

end;

procedure RemoveQ(var Queue: QueueType; var Item:QueueElement);

var Pt: QueuePtr;

begin

if EmptyQ(Queue) then writeln('hang doi rong')

else WITH Queue DO

begin Item:= front^.Du_Lieu;

Pt := front;

if front <> rear then

front :=front^.next

else begin front := Nil;

rear :=Nil

end;

Dispose(Pt);

end;(*WITH*)

end; (* removeQ*);

end.

Ví dụ áp dụng: giả thiết đã tạo 2 thư viện Stack.tpu và Queue.tpu, dùng các phép toán cơ bản của 2 thư viện trên để viết thủ tục đảo ngược các phần tử của hàng đợi

uses STACK, QUEUE;

procedure taohangdoi (var Q:QueueType);

var i:integer;

begin CreateQ(Q);

writeln('dua vao cac so nguyen:');

while not eoln Do

begin

read(i);

AddQ(Q,i)

end;

readln;

end;

var Q: QueueType;

S: StackType;

x: Integer;

begin taohangdoi(Q);

CreateS(S);

while not EmptyQ(Q) do

begin RemoveQ(Q,x);

Push(S,x)

end;

while not EmptyS(S) Do

begin Pop(S,x);

AddQ(Q,x);

write(x,' ')

end;

readln;

end.

thuật toán sắp xếp:

1.đơn giản cho

a. mảng

for i:=1 to n-1 do

for j:=i+1 to n do

if x[j]< x[i] then

begin

x[i]:=x[i] +x[j];

x[j]:=x[i] - x[j];

x[i]:=x[i] - x[j];

end;

b. cho danh sách liên kết

2. nổi bọt- sắp xếp dần

program sapxep_noibot;

uses Wincrt;

var i,j,n,k:integer;

a:array[1..50] of real;

tg:real;

begin write('nhap N:');

readln(N);

for i:=1 to n dp

begin write('nhap a[',i,']=');

readln(a[i])

end;

for i:=1 to n do

for j:=1 to n-i do

if a[j]> a[j+1] then

begin tg:=a[j];

a[j]:=a[j+1];

a[j+1]:=tg

end;

for i:=1 to n do

writeln(a[i]:8:8,' ');

end.

3. sắp xếp chèn

giải thích sơ đồ thuật toán:

b1:khởi động: x[0] tại giá trị -∞.

như vậy x[i] >= x[0] với mọi i

b2:

for i:=2 to n do

begin r := x[i];

j:=i-1;

while r< x[j] do

begin

x[j+1] := x[j]; {chuyển dịch sang phải tạo ô trống}

j := j-1 { giảm j để xét phần tử trước đó}

end;

x[j+1] := r; { chuyển r vào ô trống}

end;

bài tập du lịch

program bai_tap_du_lich;

const f1 = 'điadiem.txt';

f2= 'khach.txt';

f3= 'ketqua.txt';

var h1: array[1..100] of string[30];

h2: array[1..100] of integer;

h3: array[1..100,1..15] of integer;

i,j,n,t,tg : integer;

tgd: string[30];

f : text;

begin

assign(f,f1);reset(f);

i:=1

while not eof(f) do

begin

readln(f,h1[i]);

i:= i+1;

end;

n:= i-1;

close(f);

assign(f,f2);reset(f);

for i:=1 to n do

begin

t:=0;

for j:=1 to 12 do

begin

read(f,h3[i,j]);

t:= t + h3[i,j];

end;

h2[i]:=t;

end;

close(f);

for i:=1 to n do

for j:=1 to n-1 do

if (h2[j]>h2[j+1]) then

begin

tg:= h2[j];

h2[j]:= h2[j+1];

h2[j+1]:=tg;

tgd:= h1[j];

h1[j]:= h1[j+1];

h1[j+1]:= tgd;

end;

assign(f,f3);rewrite(f);

for i:=1 to n do

begin

write(f,h1[i],' ');

writeln(h2[i]);

end;

readln;

end.

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #tmd