順序棧及鏈棧常用方法

2021-09-02 18:52:22 字數 2680 閱讀 1429

儲存結構定義

typedef int elemtype;

typedef enum statusstatus;

typedef struct sqstacksqstack;

初始化棧

//順序棧(基於陣列的)

status initstack(sqstack *s,int sizes) //初始化

s->top = -1;

s->size = sizes;

t = 1; //表示已經初始化

return ok;

}

判空

status isemptystack(sqstack *s)
取得棧頂元素

status gettopstack(sqstack *s,elemtype *e) else 

return ok;

}

清空棧

status clearstack(sqstack *s)
銷毀棧

status destroystack(sqstack *s)

free(s->elem);

t = 0; //標記棧已經不存在

return ok;

}

獲取棧深度

status stacklength(sqstack *s,int *length) else 

}

入棧

status pushstack(sqstack *s,elemtype datas)

s->top++;

s->elem[s->top] = datas;

return ok;

}

出棧

//出棧,並用datas返回其值

status popstack(sqstack *s,elemtype *datas)

*datas = s->elem[s->top];

s->top--;

return ok;

}

遍歷棧

void printstack(sqstack *s) 

}

儲存結構定義

typedef int elemtype;

typedef enum statusstatus;

typedef struct stacknodestacknode, *linkstackptr;

typedef struct linkstacklinkstack;

初始化鏈棧

status initlstack(linkstack *s)   //初始化

判空

status isemptylstack(linkstack *s)
取棧頂結點

status gettoplstack(linkstack *s,elemtype *e)

*e = s->top->data;

return ok;

}

入棧

// 類似鍊錶的插入操作 

status pushlstack(linkstack *s,elemtype datas) else

}

出棧

//類似鍊錶刪除操作 

status poplstack(linkstack *s,elemtype *datas) else

}

清空鏈棧

status clearlstack(linkstack *s)

while(!isemptylstack(s))

s->count = 0;

return ok;

}

銷毀鏈棧

status destorylstack(linkstack *s)

clearlstack(s); //先清空棧再釋放空間

free(s);

t = 0;

return ok;

}

遍歷鏈棧

void printlstack(linkstack *s) 

}

棧,順序棧,鏈棧

棧作為一種限定性線性表,是將表的插入刪除限制為僅在表的一端進行,通常將表中允許插入刪除的一端叫做棧頂 top 因此棧頂的當前位置是動態變化的。棧的另一端叫做棧底 bottom 當棧中沒有元素時稱為空棧。插入操作稱為進棧或入棧,刪除操作稱為出棧或退棧。棧是先進後出的線性表,簡稱為lifo表。棧主要有兩...

棧 順序棧 鏈棧

棧 順序棧 鏈棧 分別用順序表和煉表實現棧,完成入棧 出棧 窺探棧頂元素等操作 commom.h ifndef common h define commom h include include include include include define elemtype int void swap...

順序棧,鏈棧

二,鏈棧 public inte ce istack public class seqstack implements istack 將棧置空 public void clear 判斷棧是否為空 public boolean isempty 返回棧中元素的個數 public intlength 返回...