Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
kiem tien, kiem tien online, kiem tien truc tuyen, kiem tien tren mang
Thứ Ba, 17 tháng 12, 2013

I. Lý thuyết :
1. Định nghĩa :
Ngăn xếp ( stack )là một kiểu danh sách tuyến đặc biệt mà phép bổ sung hoặc loại bỏ phần tử luôn thực hiện tại một đầu, gọi là đỉnh( top ). Stack thuộc và loại danh sách hoạt động dựa trên nguyên tắc LIFO (Last- in- First- Out)

2. Cách khai báo :
Khai báo stack :
typedef struct 
{
        int     top;
        int nodes[MAX];
} stack;

Kiểm tra stack rỗng :
int Empty(stack *ps) 
{
        if (ps ->top == -1)
            return(TRUE);
        return(FALSE);
}

Kiểm tra stack đầy:
int Full(stack *s)
{
   if(s->top == MAX-1) return 1;
    else return 0;
}

Thêm phần tử vào đỉnh stack:
void    Push (stack *ps, int x)
{
        if ( ps ->top == -1) {
            printf(“\n stack full”);
            return;
        }
        ps -> top = ps ->top + 1;
        ps -> nodes[ps->top] = x;
}

Lấy phần từ đỉnh stack :
int Pop( stack *s)
{
      if(Empty(s)){
            printf("\n Stack rong");
            return NULL;
            }
       return(s->info[s->top--]);
  }

3. Ví dụ minh họa :
Viết chương trình chuyển đổi số thập phân sang nhị phân .
C1 : Cách viết không dùng stack :
#include<stdio.h>
#include<conio.h>
#define MAX 255
int main()
{
    int x,i=16,matna=0x8000,j=0;//thêm biến j để chặn
    printf("Nhap so: ");
    scanf_s("%d",&x);
    printf("\nKet qua:");
    for(;i;--i)
    {
    if(x&matna)
        {printf("1");j=1;}
    else if(j)printf("0");
    matna>>=1;
    }
    _getch();
    return 0;
    }
C2: Cách viết dùng stack :
// stack_chuyen_doi_co_so.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 255
void push(int *s, int *top, int x)
{
if (*top == MAX)
{
printf("\n Stack day");
_getch();
exit(0);
}
s[++(*top)] = x;
}
int pop(int *s, int *top)
{
if (*top == 0)
{
printf("\n Stack rong");
_getch();
exit(0);
}
return(s[(*top)--]);
}
int main()
{
int x, s[MAX], top = 0;
printf("\n Nhap so thap phan : ");
scanf_s("%d", &x);
do
push(s, &top, x % 2);
while (x /= 2);
printf("\n So nhi phan sao khi chuyen doi :");
for (; top;)
printf("%d", pop(s, &top));
_getch();
return 0;
}


II. Bài tập :



0 nhận xét:

Đăng nhận xét

domain, domain name, premium domain name for sales

Popular Posts