1. 程式人生 > >棧的入棧出棧取棧頂(連結串列實現)

棧的入棧出棧取棧頂(連結串列實現)

基於連結串列實現入棧,出棧,取棧頂元素的操作      
           鏈式棧  
                  入棧     (連結串列頭插) 比較方便
                  出棧     (連結串列頭刪)

這裡寫圖片描述

標頭檔案

#pragma once  //防止標頭檔案重複定義

#include<stdio.h>
#include<stdlib.h>

typedef char Liststacktype;   //char型別

typedef struct Liststack
{
    Liststacktype data;      //當前節點儲存元素
struct Liststack* next; //指向下一節點 }Liststack; //初始化 void ListstackInit(Liststack** phead); //建立節點 Liststack* ListnodeCreat(Liststacktype value); //銷燬節點 void ListnodeDestroy(Liststack* node); //入棧 void ListstackPush(Liststack**phead, Liststacktype value); //出棧 void ListstackPop(Liststack**phead); //取棧頂元素
Liststacktype ListstackGet(Liststack*head);

函式實現

#include"liststack.h"


//初始化
void ListstackInit(Liststack** phead)
{
    if (phead == NULL)
    {
        //非法輸入
        return;
    }
    *phead = NULL;        
}

//建立節點
Liststack* ListnodeCreat(Liststacktype value)
{
    Liststack* new = (Liststack*
)malloc(sizeof(Liststack)); new->data = value; new->next = NULL; return new; } //銷燬節點 void ListnodeDestroy(Liststack* node) { free(node); node = NULL; } //入棧 (頭插) void ListstackPush(Liststack**phead, Liststacktype value) { if (phead == NULL) { return; } Liststack* new = ListnodeCreat(value); Liststack* cur = *phead; *phead = new; new->next = cur; } //出棧(頭刪) void ListstackPop(Liststack** phead) { if (phead == NULL) { printf("非法輸入"); return; } if (*phead == NULL) { printf("空連結串列"); return; } Liststack* cur = *phead; //指向頭節點 *phead = (*phead)->next; ListnodeDestroy(cur); return; } //取棧頂元素 Liststacktype ListstackGet(Liststack* head) { if (head == NULL) { return; } Liststack* cur = head; //(若採用頭插入棧)頭節點即為棧頂元素 return cur->data; }

功能測試

#include"liststack.h"

#define FUNCTION() printf("************  %s  *************\n",__FUNCTION__) ;

//列印函式
void  Printchar(Liststack* head, const char *msg)
{
    printf("[ %s ]:\n", msg);
    if (head == NULL)
    {
        return;
    }
    Liststack* cur = head;
    while (cur!= NULL)
    {
        printf("[ %c ]", cur->data);
        cur = cur->next;
    }
    printf("\n");
    return;
}

void TeststackPush()
{
    FUNCTION();
    Liststack* head;
    ListstackInit(&head);

    ListstackPush(&head, 'a');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'b');
    Printchar(head, "入棧一個元素");
}

void TeststackPop()
{
    FUNCTION();
    Liststack* head;
    ListstackInit(&head);

    ListstackPush(&head, 'a');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'b');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'c');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'd');
    Printchar(head, "入棧一個元素");


    ListstackPop(&head);
    Printchar(head, "出棧一個元素");
    ListstackPop(&head);
    Printchar(head, "出棧一個元素");
}


void TeststackGet()
{
    FUNCTION();
    Liststack* head;
    ListstackInit(&head);

    ListstackPush(&head, 'a');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'b');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'c');
    Printchar(head, "入棧一個元素");
    ListstackPush(&head, 'd');
    Printchar(head, "入棧一個元素");

    Liststack* ret = ListstackGet(head);
    printf("棧頂元素:%c\n\n", ret);

    ListstackPop(&head);
    Printchar(head, "出棧一個元素");
    ret = ListstackGet(head);
    printf("棧頂元素:%c\n\n", ret);

}

int main()
{

    TeststackPush();
    TeststackPop();
    TeststackGet();

    return 0;
}

相關推薦

連結串列實現

基於連結串列實現入棧,出棧,取棧頂元素的操作 鏈式棧 入棧 (連結串列頭插) 比較方便 出棧 (連結串列頭刪) 標頭檔案

C++ 連結串列實現

第一、基本概念 棧中的元素遵守“先進後出”的原則(LIFO,Last In First Out)   只能在棧頂進行插入和刪除操作   壓棧(或推入、進棧)即push,將資料放入棧頂並將棧頂指標加一   出棧(或彈出)即pop,將資料從棧頂刪除並將棧頂指標減一   棧的基本操作有:pop,push,

分別用列表和連結串列實現

#!/usr/bin/python3 class StackUnderflow(ValueError):     pass class ListStack():     def __init__(self):      

資料結構 的應用任意進位制轉換c語言實現

#include "stdlib.h" #include "stdio.h" typedef struct Stack{ int *base; int *top; int stacksize;

資料結構——,佇列相關操作C語言實現

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc

連結串列實現佇列的隊和入隊,

佇列的出隊和入隊 queue.h #ifndef QUEUE_H_ #define QUEUE_H_ #include<iostream> typedef struct tagstude

java使用連結串列實現先進後

public class LinkStack <Item> implements Iterable<Item>{ private Node first;//棧頂

算法 - 與隊列C 語言實現

元素 語言 訪問規則 並且 下標 出棧 數據結構 規則 算法 目標: 理解 棧 與 隊列 這兩種數據結構, 並且知道如何應用。 算法 + 數據結構 = 程序 一、堆棧 堆棧是一組元素的集合,類似於數組,但數組可以按下標訪問,堆棧的訪問規則只能為push 與

基於MEAN全架構的多用戶博客系統Angular2+Node+MongoDB

mode 封裝 pes 開發 第2章 www. 基本 第5章 通過 基於MEAN全棧架構的多用戶博客系統(Angular2+Node+MongoDB)課程學習地址:http://www.xuetuwuyou.com/course/223課程出自學途無憂網:http://ww

下壓堆鏈表實現

list true urn div AC 元素 next 添加 定義 import java.util.Iterator; public class Stack<Item> { private Node first; //棧頂 privat

的建立-----用連結串列實現

設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT  publi

Java用連結串列實現

上一篇實現了佇列,這一篇我們實現棧。 棧是後入先出的資料結構。 連結串列中插入資料有頭插法和尾插法,本篇我們使用頭插法。 不多說直接上程式碼 連結串列的節點定義和上一篇使用的是同一個,可以參考上一篇。 public class StackImpl<T> { p

十三 用連結串列實現

用連結串列實現棧:     連結串列棧: package com.lt.datastructure.stackqueue; /* * 使用連結串列實現棧 */ public class LinkedListStack<E> implements Stack

java版資料結構與演算法—連結串列實現

package com.zoujc; /** * 用連結串列實現棧 */ class MyLinkStack { private Link first; public MyLinkStack(){ first = null; } //判空

Java實現---連結串列實現

 用連結串列實現棧: 其實就只是換了個名字,包裝起來而已,沒什麼新的東西。 注:這裡插入結點的方法應為在頭部插入結點(與輸入的值逆置),這樣構成的才是棧 /** * 用連結串列實現棧 * @author Administrator * */ public c

資料結構---和佇列結構體實現

棧(LIFO) 棧(stack)是一種只能在一端進行插入或刪除操作的線性表。 棧頂(top):允許進行插入、刪除操作的一端 棧底(bottom):另一端稱為棧底 進棧或入棧(push):插入操作 出棧或退棧(pop):棧的刪除操作 n個不同元素通過一個棧產生的出棧

Java仿微信全 高效能後臺+移動客戶端已完結雲盤下載

第1章 課程介紹 課程介紹 第2章 netty介紹與相關基礎知識 初識netty,學習阻塞與非阻塞,同步與非同步,理解BIO、NIO、AIO以及netty的執行緒模型 第3章 使用netty編寫第一個hello netty 伺服器 從零開始使用netty編寫伺服器,在網頁

連結串列實現的基本操作

初始化: void InitStack(LinkStack &s) {     s = NULL; } 進棧: void Push(LinkStack &s,ElemType e) {     LinkStack p;     p = (LinkStac

【資料結構與演算法】之的基本介紹及其陣列、連結串列實現---第四篇

一、棧的基本介紹 1、棧的基本概念 棧是一種限制在一端進行插入和刪除操作的線性表資料結構。棧中有兩個比較重要的操作:push(壓棧:將元素壓入棧頂)和pop(彈棧:從棧頂彈出一個元素)。都滿足先進後出、後進先出的特點! 從圖中可以看出,我們常把棧的上面稱為棧

資料結構:用連結串列實現的括號匹配

完成以下程式,並在右邊空白處,對錯誤進行修改,並記錄下程式執行結果: 1. 編寫演算法,判斷一表達式中的括號是否配對,包括大、中、小三類括號。 連結串列版本: #include <cstdio> #include <cmath> #inclu