c語言 棧(受限制線性表)

2021-10-06 13:22:10 字數 3091 閱讀 7254

它的特殊之處在於限制了這個線性表的插入和刪除的位置,它始終只在棧頂進行。這也

就使得棧底是固定的,最先進棧的只能在棧底。

棧的插入操作,叫做進棧,也成壓棧。類似子彈入彈夾

棧的刪除操作,叫做出棧,也有的叫做彈棧,退棧。如同彈夾中的子彈出夾

用陣列實現棧

#pragma once

#include

#include

#ifdef __cplusplus

extern

"c";

typedef

void

* seqstack;

//陣列高下標的位置當做棧頂,因為不需要移動陣列中的元素在插入和刪除中

//初始化

seqstack init_seqstack()

;//入棧

void

push_seqstack

(seqstack stack,

void

*data)

;//出棧

void

pop_seqstack

(seqstack stack)

;//獲得棧頂元素

void

*top_seqstack

(seqstack stack)

;//獲得棧的大小

intsize_seqstack

(seqstack stack)

;//銷毀棧

void

destroy_seqstack

(seqstack stack)

;#ifdef __cplusplus

}#endif

#include

"seqstack.h"

//初始化

seqstack init_seqstack()

//memset(stack->data, 0, sizeof(struct sstack));

stack->size =0;

for(

int i =

0; i < max;

++i)

return stack;

}//入棧

void

push_seqstack

(seqstack stack,

void

*data)if(

null

== data)

struct sstack *s =

(struct sstack *

)stack;

if(s->size == max)

s->data[s->size]

= data;

s->size++;}

//出棧

void

pop_seqstack

(seqstack stack)

struct sstack *s =

(struct sstack *

)stack;

if(s->size ==0)

s->data[s->size -1]

=null

; s->size--;}

//獲得棧頂元素

void

*top_seqstack

(seqstack stack)

struct sstack *s =

(struct sstack *

)stack;

if(s->size ==0)

return s->data[s->size -1]

;}//獲得棧的大小

intsize_seqstack

(seqstack stack)

struct sstack *s =

(struct sstack *

)stack;

return s->size;

}//銷毀棧

void

destroy_seqstack

(seqstack stack)

free

(stack)

;}

棧的順序儲存

#define _crt_secure_no_warnings

#include

#include

#include

#include

"seqstack.h"

struct person

;void

test()

;struct person p2 =

;struct person p3 =

;struct person p4 =

;struct person p5 =

;struct person p6 =

;//資料入棧

push_seqstack

(stack,

&p1)

;push_seqstack

(stack,

&p2)

;push_seqstack

(stack,

&p3)

;push_seqstack

(stack,

&p4)

;push_seqstack

(stack,

&p5)

;push_seqstack

(stack,

&p6)

;//輸出棧中所有元素

while

(size_seqstack

(stack)

>0)

printf

("size:%d\n"

,size_seqstack

(stack));

//銷毀棧

destroy_seqstack

(stack)

; stack =

null;}

intmain()

思考,void *data[max];為什麼不用free

20 受限線性表 棧

棧也是一種線性表,棧中的元素具有線性關係,只不過它是一種特殊的線性表而已,也就是說,棧是一種只能在棧頂的位置進行插入和刪除操作的線性表。圖1 棧的基本操作 棧的插入操作,叫做進棧,也稱為壓棧。類似子彈入彈夾,棧的刪除操作,叫做出棧,也有的叫做弾棧,退棧。如同彈夾中的子彈出夾。對於棧中的a,b,c,d...

受限的線性表 棧 順序棧

include define maxsize 50 typedef int datatype using namespace std 棧的資料結構 順序棧 資料運算 1.初始化乙個空棧 初始指標 1 2.資料元素入棧 如果棧沒滿,資料元素入棧 3.資料元素出棧 如果棧沒空,資料元素出棧 4.得到棧頂...

C語言中「不受限制」的字串函式總結

按 c和指標 中所說,那些常用的字串函式都是 不是限制的 就是說它們只能通過尋找字串末尾的null來判斷字元程式設計客棧串的長度。strlen函式用於求解字元www.cppcns.com串長度,其返回型別為unsigned int 即size t strlen函式從起點開始,往後計數,遇到 0 停止...