資料結構 不定長順序棧

2021-09-25 20:39:47 字數 2523 閱讀 9306

1、棧(stack):又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

特點:棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。棧也稱為後進先出表。

2、不定長順序棧的儲存結構:

3、不定長順序棧的實現:

(1)stack.h:

//不定長順序棧實現

#pragma once

#define initsize 10

typedef struct dstack

dstack,*pdstack;

void initstack(pdstack ps);

//入棧

bool push(pdstack ps,int val);

//獲取棧頂的值,但不刪除棧頂元素

bool gettop(pdstack ps,int *rtval);

//出棧,獲取棧頂的值,且刪除棧頂元素

bool pop(pdstack ps,int *rtval);

//獲取有效資料個數

int getlength(pdstack ps);

//判空

bool isempty(pdstack ps);

//清空

void clear(pdstack ps);

//銷毀

void destroy(pdstack ps);

//列印

void show(pdstack ps);

(2)stack.cpp:

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

void initstack(pdstack ps)

ps->elem = (int *)malloc(initsize*sizeof(int));

ps->top = 0;

ps->stacksize = initsize;

}static bool isfull(pdstack ps)

//將總容量擴大2倍

void inc(pdstack ps)

//入棧

bool push(pdstack ps,int val)

ps->elem[ps->top] = val;

ps->top ++;

return true;

}//獲取棧頂的值,但不刪除棧頂元素

bool gettop(pdstack ps,int *rtval)

if(rtval != null)

return true;

}//出棧,獲取棧頂的值,且刪除棧頂元素

bool pop(pdstack ps,int *rtval)

if(rtval != null)

return true;

}//獲取有效資料個數

int getlength(pdstack ps)

bool isempty(pdstack ps)

void clear(pdstack ps)

void destroy(pdstack ps)

//列印

void show(pdstack ps)

printf("\n");

}

(3)main.cpp:

#include "stack.h"

#include int main()

show(&s);//測試列印

printf("-------------------------------------\n");

printf("%d\n",getlength(&s));//測試獲取有效資料的個數

printf("-------------------------------------\n");

int tmp;

gettop(&s,&tmp);//測試獲取棧頂值 但不刪除

printf("%d\n",tmp);

printf("-------------------------------------\n");

int tmp1;

while(!isempty(&s))

printf("-------------------------------------\n");

destroy(&s);//測試摧毀

show(&s);//測試列印

return 0;

}

資料結構 鏈式棧 不定長順序棧

棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...

資料結構 不定長順序表

順序表是在計算機記憶體中以陣列的形式儲存的線性表,所以順序表的儲存結構和陣列非常類似,而它最顯要的特點就是邏輯位址和實體地址都相連。alterlist.h pragma once pragma once是乙個比較常用的c c 預處理指令,只要在標頭檔案的最開始加入這條預處理指令,就能夠保證標頭檔案只...

資料結構 順序表(二) 不定長順序表

一 匯入 二 儲存結構 與定長的順序表的儲存結構相比較,不定長的順序表只增加乙個元素listsize 用於記錄當前順序表的總長度 具體結構如下圖所示 結構定義 typedef struct dseqlist int elem 指向存放資料的動態陣列 int length 有效資料個數 int lis...