資料結構 順序,鏈式棧的實現

2021-08-26 15:33:01 字數 3571 閱讀 9852

功能:

1.初始化

2.銷毀

3.入棧

4.出棧

順序棧

seqstack.h

#pragma once

#include

#define max_size 1000

typedef char seqstacktype;

//順序棧

typedef struct seqstack

seqstack;

//初始化

void seqstackinit(seqstack *seq);

//銷毀

void seqstackdestory(seqstack *seq);

//入棧

void seqstackpush(seqstack *seq, seqstacktype value);

//出棧

void seqstackpop(seqstack *seq, seqstacktype *e);

void printstack(seqstack *seq, char *msg);

seqstack.c

#include "seqstack.h"

#define title printf("--------------%s-------------\n",__function__)

void seqstackinit(seqstack *seq)

seq->top = 0;

seq->bottom = 0;

}void seqstackpush(seqstack *seq, seqstacktype value)

if (max_size == seq->top)

seq->data[++seq->top] = value;

}void seqstackpop(seqstack *seq, seqstacktype *e)

if (seq->bottom == seq->top)

*e = seq->data[seq->top--];

}void printstack(seqstack *seq, char *msg)

printf("\n\n\n%s", msg);

printf("[seq->top]->");

while((seq->top) != 0)

printf("[bottom]\n");

}void seqstackdestory(seqstack *seq)

seq->top = seq->bottom = 0;

}void testpush()

void testpop() ;

seqstackpop(&seq, e);

printf("\n\n出棧乙個元素:%c\n", *e);

}void testdestory()

int main()

鏈式棧

linkstack.h

#pragma once

#include

typedef

char stacktype;

//建立乙個結點的結構體

typedef

struct linknodelinknode;

//建立棧的結構體

typedef

struct linkstacklinkstack;

void destorynode(linknode **node);

//初始化鏈式棧

void linkstackinit(linkstack* link);

//入棧

void linkstackpush(linkstack* link, stacktype value);

//出棧

stacktype linkstackpop(linkstack* link);

//銷毀

void linkstackdestory(linkstack* stack);

linkstack.c

#include

#include

"linkstack.h"

linknode *creatnewnode(stacktype value)

//初始化鏈式棧

void linkstackinit(linkstack*

link)

link

->top = creatnewnode('0');

link

->bottom = creatnewnode('0');

link

->top->_next =

link

->bottom;

link

->size =0;}

//入棧

void linkstackpush(linkstack*

link, stacktype value)

linknode* node = creatnewnode(value);

linknode* next =

link

->top->_next;

link

->top->_next = node;

node->_next = next;

link

->size++;

}//出棧

stacktype linkstackpop(linkstack*

link)

if (link

->size ==0&&

link

->top->_next ==

link

->bottom)

linknode *pop =

link

->top->_next;

link

->top->_next = pop->_next;

link

->size--;

stacktype n = pop->

data;

destorynode(&pop);

return n;

}//銷毀乙個結點

void destorynode(linknode** node)

if (*node ==

null)

free(*node);

}int linkstackempty(linkstack*

link)

if (link

->top->_next ==

link

->bottom &&

link

->size ==

0) else

}//銷毀

void linkstackdestory(linkstack*

stack)

//判斷是否為空棧

while (!linkstackempty(stack))

}

資料結構 順序棧和鏈式棧

棧 限定在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端稱為棧底。棧的操作特性 後進先出 順序棧 設定top指標指示棧頂元素在陣列中的位置。進棧 top 1 棧空 top 1 出棧 top 1 棧滿 top maxsize const int max size 100 temp...

資料結構棧(鏈式實現)

真正的棧操作是在棧頂,這裡給出的棧是帶了頭結點的棧,也就是說head next代表圖示棧頂,head next data是1 實現 include include typedef int datatype typedef struct snode lsnode 初始化帶頭結點的鏈式堆疊,初始化函式中...

資料結構遍歷順序棧 資料結構 順序棧的實現

資料結構 順序棧的實現 1 快速開始 棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 先出,先入後出。除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。2 實現棧 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者...