順序棧和鏈式棧的基本操作

2021-08-20 04:25:43 字數 2947 閱讀 2646

棧作為一種

資料結構,是一種只能在一端進行插入和刪除操作的特殊

線性表。它按照

先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底

指標。棧是允許在同一端進行插入和刪除操作的特殊

線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為

進棧(push),刪除則稱為退棧(pop)。棧也稱為後進先出表。

順序棧的實現

stack.h
#pragma once

#define _crt_secure_no_warn

typedef int datatype;

typedef struct stack1

stack;

void intistack(stack*ps, size_t capacity);//初始化

void printstack(stack*ps);//列印

void pushstack(stack*ps, datatype data);//入棧

void popstack(stack*ps);//出棧

datatype topstack(stack*ps);//取棧頂元素

size_t sizestack(stack*ps);//獲取棧的大小

int emptystack(stack*ps);//判空

void destroystack(stack*ps);//銷毀棧

stack.c

#define _crt_secure_no_warnings 1

#include#include#include#include"stack.h"

void intistack(stack*ps, size_t capacity)

void printstack(stack*ps)

}void pushstack(stack*ps, datatype data)

ps->top[ps->size++] = data;

}void popstack(stack*ps)

datatype topstack(stack*ps)

size_t sizestack(stack*ps)

int emptystack(stack*ps)

void destroystack(stack*ps)

test.c

#define _crt_secure_no_warnings 1

#include#include"stack.h"

#includetest()

int main()

鏈式棧的基本操作:

stack.h
#pragma once

#define _crt_secure_no_warning1

typedef int datatype;

typedef struct node

node;

node*buynode(datatype value);//建立乙個節點

void initstack(node**p);//初始化

node* pushbackstack(node**p, datatype value);//入棧

void popbackstack(node**p);//出棧

node*topstack(node**p);//取棧頂元素

void printstack(node**p);//列印

size_t getsizestack(node**p);//取棧大小

stack.c

#define _crt_secure_no_warnings 1

#include#include#include#include"stack.h"

node*buynode(datatype value)

return -1;

}void intistack(node**p)

node* pushbackstack(node**p,datatype value)

node* pcur = *p;

while (pcur->_next!= null)

node*pnewnode = buynode(value);

pcur->_next = pnewnode;

return pnewnode;

}void popbackstack(node**p)

free(pcur);

if (pprev != null) }

node*topstack(node**p)

return pcur;

}size_t getsizestack(node**p)

return count;

}void printstack(node**p)

printf("%d\n", topstack(p)->data);

}

test.c

#define _crt_secure_no_warnings 1

#include#include"stack.h"

#includetest()

int main()

順序棧和鏈式棧

順序棧 採用順序儲存結構的棧 push pop peek 方法的時間複雜度為o 1 當需要擴充棧容量時push 方法的時間複雜度為o n package com.lzw.demo.stacktest public inte ce sstack package com.lzw.demo.stackte...

順序棧和鏈式棧

相信大家對棧都不陌生,棧作為一種基礎的資料結構,在很多地方都會用到,在這裡整理一下順序棧和鏈式棧的一些基礎操作。pragma onc define max size 10 class seqstack seqstack 判斷棧滿 bool full 判斷棧空 bool empty 入棧 void p...

Java的順序棧和鏈式棧

棧是限制在表的一段進行插入和刪除的運算的線性表,通常能夠將插入 刪除的一端為棧頂,例外一端稱為棧底,當表中沒有任何元素的時候稱為空棧。通常刪除 又稱 退棧 叫做彈出pop操作,每次刪除的都是棧頂最新的元素 每次插入 又稱 進棧 稱為壓入push操作。當棧滿的時候,進行push 操作,會上溢,當空棧的...