Linux資料結構 棧(用順序表實現)

2021-08-19 02:26:00 字數 1945 閱讀 1966

用順序表實現的棧和順序表有什麼區別呢?

我們先來分析下它們的結構體

順序表:

typedef char seqlisttype;

typedef struct seqstack

max_size是這個順序表最多能容納的資料

size為當前的元素的個數

棧:

typedef char seqstacktype;

typedef struct seqstack

size為棧內元素的個數

capacity為data這段記憶體中容納的元素個數

1.順序表已經定義好了最大的長度;而棧的最大長度可以進行動態擴容。

2.順序表可以對內部元素進行各種操作,包括遍歷等;而棧只有三種操作:入棧、出棧、取棧頂元素,這樣可以使棧內的資料更安全。

以下為用順序表實現棧的**:

.c檔案

#include#include#include"seqstack.h"

void seqstackinit(seqstack* stack)

void seqstackdestory(seqstack* stack)

void seqstackresize(seqstack* stack)//擴容

//釋放原malloc的記憶體

free(stack->data);

stack->data = new_data;

return;

}void seqstackpushback(seqstack* stack, seqstacktype value)

else

return;

}void seqstackprintchar(seqstack* stack, const char* msg)

printf("\n");

return;

}void seqstackpopback(seqstack* stack)

int seqstacktop(seqstack* stack, seqstacktype* value)//返回棧頂元素的值

void testseqstackpushback()

void testseqstackpopback()

void testseqstacktop()

else

}int main()

.h檔案

#pragma once 

#includetypedef char seqstacktype;

typedef struct seqstack

seqstack;

//棧初始化

void seqstackinit(seqstack* stack);

//棧的銷毀

void seqstackdestory(seqstack* stack);

//實現棧的動態擴容

void seqstackresize(seqstack* stack);//擴容

//入棧

void seqstackpushback(seqstack* stack, seqstacktype value);

//列印棧

void seqstackprintchar(seqstack* stack, const char* msg);

//出棧

void seqstackpopback(seqstack* stack);

//取棧頂元素

int seqstacktop(seqstack* stack, seqstacktype* value);//返回棧頂元素的值

測試結果如下:

資料結構 順序棧

編寫乙個程式,實現順序棧 假設棧中元素型別為char 的各種基本運算。並完成下面功能 1 初始化棧s 2 判斷棧s是否非空 3 依次進棧元素a,b,c,d,e 4 判斷棧s是否非空 5 輸出棧長度 6 輸出從棧頂到棧底元素 7 輸出出棧序列 8 判斷棧s是否非空 9 釋放棧。include incl...

資料結構 順序棧

構造乙個順序棧 當輸入9999時,結束入棧操作 輸出棧中元素,顯示棧頂元素,刪除棧頂元素 include include include define stack init size 100 define ok 1 define error 0 typedef int selemtype 順序棧結構...

資料結構 順序棧

棧是一種只能在一端進行插入或刪除操作的線性表。其中允許進行插入或刪除操作的一端稱為棧頂 top 棧頂是由乙個稱為棧頂指標的位置指示器來指示,它是動態變化的。表的另一端稱為棧底,棧底是固定不變的。先進後出 filo include include define maxsize 100 typedef ...