棧的入棧出棧取棧頂(連結串列實現)
基於連結串列實現入棧,出棧,取棧頂元素的操作
鏈式棧
入棧 (連結串列頭插) 比較方便
出棧 (連結串列頭刪)
標頭檔案
#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