基於順序表實現棧的基本操作

2021-08-18 13:09:46 字數 2832 閱讀 9694

棧:什麼是棧?又該怎麼理解呢?

下面實現棧的基本操作

seqstack.h檔案內容

#pragma once

#include

#include

typedef

char seqstacktype;

typedef

struct seqstack

seqstack;

void seqstackinit(seqstack* stack); //初始化棧

void seqstackprint(seqstack* stack,const

char *s); //列印棧

void seqstackpush(seqstack* stack,seqstacktype value); //入棧

void seqstackpop(seqstack* stack); //出棧

int seqstacktop(seqstack* stack,seqstacktype* value); //取棧頂元素

void seqstackdestory(seqstack* stack); //銷毀棧

初始化時,有效元素size為0;同時設定順序表容量,並且給指標分配記憶體空間

//初始化棧

void seqstackinit(seqstack*

stack)

stack

->size=

0; stack

->capicity=

1024; //設定容量

stack

->

data

=(seqstacktype*)malloc(stack

->capicity*sizeof(seqstack)); //申請空間

擴容時,擴容策略由自己定。capicity一般將他直接擴大二倍,是由於stl的擴容原則這樣規定,+1是為了排除原來大小是0的情況

//擴容

void seqstackresize(seqstack* stack)

seqstacktype* new=null;

//如果size>capicity,則擴容

if(stack->size>=stack->capicity)

size_t i=0;

//搬移資料

for( ;isize;i++)

//釋放原來的指標

free(stack->data);

stack->data=new;

}

從棧頂進入。入棧時需要考慮size大於順序表的特殊情況,當超出時,需要擴容。

//入棧

出棧時要考慮空棧情況,若空棧,沒有元素出棧。出棧失敗。出棧操作只需要將有效元素減1即可。

//出棧

取棧頂元素時記住不是刪除棧頂元素,而是將其取出來,所以

*value=stack->data[stack->size-1];這裡是size-1.而不是size–,取棧頂元素,而不是刪除棧頂元素

//取棧頂元素

int seqstacktop(seqstack*

stack,seqstacktype* value)

if( stack

->size==

0)

*value=

stack

->

data

[stack

->size-1]

;//這裡是size-1.而不是size--

銷毀佇列時,除了將有效元素置為零,還需要將容量capicity設定為零,釋放data指標。

//銷毀佇列

順序表實現棧的基本操作

順序表是一種儲存格式與鍊錶處於同一層次,可以用來實現一些結構,比如棧等。一.順序表 1.順序表的型別定義 靜態 define list max size 100 空間初始大小 typedef int elemtype 元素的資料型別 typedef struct sqlist 順序表靜態定義,假定 ...

順序棧的基本操作實現

這些都是頭函式裡的內容,也就是儲存之後,可以直接 對其進行呼叫。其中的乙個變數stacklen是用來記錄棧 的長度的,其實,這個變數可以不要,只是剛開始寫時 給它加上了,所以就按這樣寫了,感覺跟順序表的寫法 差不多 include include includeusing namespace std...

棧的基本操作及實現(順序棧)

順序儲存結構來實現的棧稱為順序棧,它利用一組位址連續的儲存單元存放自棧底到棧頂的資料元素,同時附設乙個指標top來指示當前棧頂的位置。注意,是c 特有的用來表示引用呼叫,所以此檔案應以.cpp字尾儲存 結構體為 define maxsize 50 typedef int elemtype typed...