Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Cấu trúc dữ liệu - Stack.

  1. #1
    Ngày gia nhập
    07 2015
    Nơi ở
    Viet Nam
    Bài viết
    99

    Mặc định Cấu trúc dữ liệu - Stack.

    Em đang thử với Stack.
    Khi em nhập dữ liệu cho phần tử của Stack thì luôn xảy ra lỗi.
    Mong mọi người chỉ giáo giúp em.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define _false 0
    #define _true 1
    
    const int number = 10;
    
    struct Node;
    typedef struct Node node, *pnode;
    
    struct Node
    {
    	int data;     
    	pnode link;  
    };
    
    typedef struct
    {
    	int number; 
    	pnode top;  
    }Stack;
    
    
    Stack InitStack();
    int isempty( Stack s );
    Stack Push( Stack s, pnode nod );
    Stack Pop( Stack s, pnode *nod );
    void Stacktop ( pnode *nod );
    void printfStack( Stack s );
    
    
    Stack InitStack()
    {
    	Stack s;
    
    	s.number = 0;
    	s.top = NULL;
    
    	return s;
    }
    
    
    int isempty( Stack s )
    {
    	if ( s.top == NULL )
    		return _true;
    	else
    		return _false;
    }
    
    
    Stack Push( Stack s, pnode nod )
    {
    	// Check whether Stack is overflow?
    	if (  s.number > number )
    	{
    		printf("\nStack is overflow");
    		return s;
    	}
    
    	nod->link = s.top;
    
    	s.top = nod;
    
    	s.number++;
    
    	return s;
    }
    
    
    Stack Pop( Stack s, pnode *nod )
    {
    	*nod = (pnode)malloc( sizeof(node) );
    
    	// Check whether Stack is underflow ?
    	if ( s.top == NULL )
    	{
    		printf("\nStack is underflow");
    		s.number = 0;
    		s.top = NULL;
    		return s;
    	}
    
    	(*nod)->data = s.top->data;
    	
    	s.top = s.top->link;
    
    	s.number--; 
    
    	return s;
    }
    
    
    void Stacktop ( pnode *nod )
    {
    	int tempData;
    
    	printf( "\nNhap du lieu cho phan tu moi: " );
    	scanf_s( "%d", &tempData );
    	(*nod)->data = tempData;
    
    	(*nod)->link = NULL;
    }
    
    
    void printfStack( Stack s )
    {
    	pnode nod;
    	int   i;
    
    	printf( "\nCac du lieu o trong Stack la: " );
    
    	for ( i = 0, nod = s.top; nod; nod = nod->link, i++ )
    	{
    		printf( "\nDu lieu cua phan tu %d la: %d", i, nod->data);
    	}
    }
    
    
    int main()
    {
    	Stack s;
    	pnode nod = 0;
    
    	// Khoi tao Stack.
    	s = InitStack();
    	
    	Stacktop( &nod );
    
    	s = Push( s, nod );
    	
    	printfStack( s );
    
    	s = Pop( s, &nod );
    	
    	free(nod);
    
    	printfStack( s );
    
    	return 0;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    929

    Khi em nhập dữ liệu cho phần tử của Stack thì luôn xảy ra lỗi.

    Do pnode trong main chưa được cấp phát.

    //pnode nod = 0;
    pnode nod = (pnode)malloc(sizeof(node));

    Đây chỉ là sửa lỗi mà bạn nêu chứ trong toàn bộ mã thì bạn chỉ nên dùng con trỏ 1 cấp thôi

  3. #3
    Ngày gia nhập
    07 2015
    Nơi ở
    Viet Nam
    Bài viết
    99

    Em cảm ơn anh.
    Anh cho em hỏi thêm: Hàm Pop em viết thế đã được chưa ạ.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn