程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 棧的鏈式結構表示與實現——自己寫數據結構

棧的鏈式結構表示與實現——自己寫數據結構

編輯:C++入門知識

棧的鏈式結構表示與實現——自己寫數據結構


    今天給大家介紹棧的鏈式結構,用dev-c++4.9.9.2調試通過,少廢話直接上代碼:

數據結構體存放文件stacklist.h文件如下

#ifndef _STACKLIST_H_
#define _STACKLIST_H_

typedef struct _Node
{
    int data;
    
    struct _Node *pre;
    struct _Node *next;
}Node,*pNode;

typedef struct _Stack_Header
{
    struct _Node *botton;
    struct _Node *top;
    int  size;    
}Stack_Header,*pStack_Header;

pStack_Header init_stack_list(void);
pNode push_node(pStack_Header plist,int data);
pNode pop_node(pStack_Header plist);
int print_stack_list(pStack_Header plist);

#endif


函數存放文件stacklist.c

/*******************************
時間:2014.12.12
作者:XIAO_PING_PING
內容:棧的鏈式數據結構
功能:學習些數據結構 
      
********************************/

#include 
#include 
#include 

#include "stacklist.h"

/*初始化一個堆棧鏈表*/
pStack_Header init_stack_list(void)
{
    pStack_Header plist;
    pNode p;
    
    plist = (Stack_Header *)malloc(sizeof(Stack_Header));
    plist->botton = NULL;
    plist->top = NULL;
    plist->size = 0;
    
    return plist;              
}

/*往堆棧裡面添加節點,數據data*/
pNode push_node(pStack_Header plist,int data)
{
    pNode p;
    
    p = (Node *)malloc(sizeof(Node));
    p->data = data;
    p->next = NULL;
    p->pre = plist->top;
    
    if((plist->top == NULL) && (plist->botton == NULL)) 
    {
        plist->top = p;
        plist->botton = p;
        plist->size = 1; 
        printf("入棧第1個節點\n");
        return  p;            
    }
    
    plist->top->next = p;
    plist->top = p;
    plist->size += 1;
    printf("入棧第%d個節點\n",plist->size);
    
    return plist->top;
}

/*出棧刪除節點*/
pNode pop_node(pStack_Header plist)
{
    pNode p;
    
    if(0 == plist->size)
    {
        printf("棧區沒有節點,無法完成出棧\n");
        
        return plist->top;                 
    }    
    
    p = plist->top;
    plist->top = plist->top->pre;  
    if(NULL != plist->top)
    {
        plist->top->next = NULL;
    }
    else
    {
        plist->botton = NULL;    
    }
    free(p); 
    
    plist->size -= 1;
    printf("出棧第%d個節點\n",plist->size + 1);
    
    return plist->top;
}

/*打印入棧數據*/
int print_stack_list(pStack_Header plist)
{
    pNode p;
    
    if((plist->top == plist->botton) && (0 == plist->size))
    {
        printf("棧區沒有節點\n");
        
        return -1;                 
    }   
    
    p = plist->botton;
    printf("從棧底開始打印數據\n");
    while(plist->top != p)
    {
        printf("%d  ",p->data) ;
        p = p->next;      
    }
    printf("%d  ",p->data) ;
    printf("\n打印完畢\n");
    return 0;
} 
 


測試文件test.c

#include 
#include 
#include 

#include "stacklist.h" 

int main()
{
    pStack_Header plist;

    plist = init_stack_list();
    
    push_node(plist,13);
    push_node(plist,1);
    push_node(plist,232);
    push_node(plist,143);
    print_stack_list(plist);  
    
    pop_node(plist);  
    pop_node(plist);  
    pop_node(plist);  
    //pop_node(plist);  
    //pop_node(plist); 
    printf("\n");
    print_stack_list(plist);   
    
    getch();
}


運行結果如下圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved