Thứ Bảy, 6 tháng 2, 2016

Một số bài tập C phần Stack


21:25:42 30/01/2013
Đề bài:
1. Sử dụng cấu trúc stack để đảo xâu kí tự ?
2. Sử dụng cấu trúc Stack để chuyển một số thập phân xang dạng nhị phân ?
3. Sử dụng cấu trúc Stack để chuyển một biểu thức trung tố xang hậu tố ?

Đoạn code hướng dẫn:
 
1.
/*Nhap vao chuoi ki tu tu ban phim, in ra chuoi da duoc dao nguoc*/
#include
#include
#include
#include
struct node{
    char item;
    struct node *next;
};
typedef struct node *stacknode;
typedef struct {
    stacknode top;
}stack;

void Khoitaostack(stack *s){
    s->top=NULL;
    return;
}
int Kiemtrarong(stack s){
    return (s.top==NULL);
}
void Push(stack*s,char c){
    stacknode p;
    p = (stacknode) malloc (sizeof(struct node));
    p->item=c;
    p->next=s->top;
    s->top=p;
    return;
}
char Pop(stack *s){
    stacknode p;
    p=s->top;
    s->top=s->top->next;
    return p->item;
}
void main(void){
    char *st;
    int i;
    stack *s;
    clrscr();
    Khoitaostack(s);//khoi tao stack
    printf("Nhap vao xau ky tu:");
    gets(st);//nhap chuoi
    for(i=0;i     Push(s,st[i]);//dua ki tu vao stack
    printf("Xau da dao nguoc la:\n");
    while (!Kiemtrarong(*s))
    printf("%c",Pop(s));//in cac ki tu trong stack
    getch();
}


2.
/*Nhap vao mot so thap phan,in ra dang nhi phan cua so do*/
#include
#include
#include
#include//su dung do co phep chia %
struct node{
    char item;
    struct node *next;
};
typedef struct node *stacknode;
typedef struct {
    stacknode top;
}stack;

void Khoitaostack(stack *s){
    s->top=NULL;
    return;
}
int Kiemtrarong(stack s){
    return (s.top==NULL);
}
void Push(stack*s,int c){
    stacknode p;
    p = (stacknode) malloc (sizeof(struct node));
    p->item=c;
    p->next=s->top;
    s->top=p;
    return;
}
int Pop(stack *s){
    stacknode p;
    p=s->top;
    s->top=s->top->next;
    return p->item;
}
void main(void){
    int n;
    int i;
    stack *s;
    clrscr();
    Khoitaostack(s);//khoi tao stack
    printf("Nhap vao so n:");
    scanf("%d",&n);//nhap vao so thap phan
    while(n>0)
    {
        Push(s,n%2);//dua so du vao stack
        n/=2;
    }

    printf("\nSo da nhap co dang nhi phan la:");
    while (!Kiemtrarong(*s))
    printf("%d",Pop(s));//in ra ngan xep
    getch();
}


3.
#include
#include
#include
#include
struct node{
    char item;
    struct node *next;
};
typedef struct node *stacknode;
typedef struct {
    stacknode top;
}stack;

void Khoitaostack(stack *s){
    s->top=NULL;
    return;
}
int Kiemtrarong(stack s){
    return (s.top==NULL);
}
void Push(stack*s,char c){
    stacknode p;
    p = (stacknode) malloc (sizeof(struct node));
    p->item=c;
    p->next=s->top;
    s->top=p;
    return;
}
char Pop(stack *s){
    stacknode p;
    p=s->top;
    s->top=s->top->next;
    return p->item;
}
void main(void){
    char *st;//coi bieu thuc nhu la mot chuoi
    int i;
    stack *s;
    clrscr();
    Khoitaostack(s);//khoi tao stack
    printf("Nhap vao bieu thuc:");
    gets(st);//nhap bieu thuc
    printf("\nChuoi da nhap sau khi dao nguoc la:\n");
    for(i=0;i     {
        if(st[i]=='(');//bo qua khi gap '('
        else if(st[i]=='+'||st[i]=='-'||st[i]=='*'||st[i]=='/')
        Push(s,st[i]);//nap toan tu vao stack

        else if(st[i]==')')
        printf("%c",Pop(s));//dua ra toan tu trong stack khi gap ')'
        else
        printf("%c",st[i]);//dua bieu thuc moi ra khi gap toan hang
    }
    while (!Kiemtrarong(*s))//in so luong cac toan tu con lai neu con
    printf("%c",Pop(s));
    getch();
}




Chỉnh sửa bởi: Lương Đức Môn

0 nhận xét: