链式栈的基本操作
鏈?zhǔn)綏1举|(zhì)是鏈表,只是用鏈表實(shí)現(xiàn)棧特性。
一般操作有:創(chuàng)建棧、棧空、清除、入棧、出棧、釋放、取棧頂。
插入刪除都是在表頭進(jìn)行,所以表頭是棧頂(頭指針即棧頂指針),表尾是棧底。
定義鏈表(棧)節(jié)點(diǎn),參考代碼如下:
typedef int datatype; typedef struct node {datatype data;struct node * next; }listnode, * linklist;棧的特性操作接口如下:
linklist linkstack_create() //創(chuàng)建棧 {linklist s;if((s = (linklist)malloc(sizeof(listnode))) == NULL){printf("malloc failed!\n");return NULL;}s->next = NULL;return s; } int linkstack_empty(linklist s) //判斷棧是否為空 {if(s->next == NULL)return 1;else return 0; }int linkstack_push(linklist s,datatype value) //入棧 { //和單鏈表的頭插入一樣的操作linklist p;if((p = (linklist)malloc(sizeof(listnode))) == NULL){printf("malloc failed!\n");return -1;}p->next = s->next;s->next = p;p->data = value;return 0; }datatype linkstack_pop(linklist s) //出棧 { // 刪除頭節(jié)點(diǎn) 顯示頭節(jié)點(diǎn)的數(shù)據(jù)linklist p;datatype ret;p = s->next;s->next = p->next;ret = p->data;free(p);p = NULL;return ret; }datatype linkstack_top(linklist s) //取棧頂 如果為空不會(huì)調(diào)用此函數(shù) {return s->next->data; }void linkstack_clear(linklist s) //清棧 不刪頭節(jié)點(diǎn) {linklist p;p = s->next;while(p!=NULL){s->next = p->next;free(p);p = s->next;}puts(""); }void linkstack_free(linklist s) //連頭節(jié)點(diǎn)都刪除 {linklist p;p = s;while(p!=NULL){s = s->next;free(p);p = s;} }?反思:
主要是了解棧的特性,用鏈表來(lái)實(shí)現(xiàn)并不算難,要注意鏈?zhǔn)綏R话悴豢紤]棧滿(mǎn)。
總結(jié)
- 上一篇: 求最长回文串
- 下一篇: with管理文件操作