本章目標:1、用c的方式實現棧2、用c++資料抽象的方式實現棧 3、比較兩者的差異性
棧的插入用頭插法,這樣子訪問最快
不採用頭節點。
c**:
頭結點的作用是使所有鍊錶(包括空表)的頭指標非空,並使對單鏈表的插入、刪除操作不需要區分是否為空表或是否在第乙個位置進行,從而與其他位置的插入、刪除操作一致。 同時頭結點的資料域可以儲存尾節點的位址。#include#include#include//定義棧中的元素
struct link
;//定義乙個棧結構體
//只需要頭指標(沒有頭結點)
//還有結構體的大小維護
struct stack
;void stackinit(struct stack* stack)
void stackpush(struct stack* stack,const int data)
int stackempty(struct stack* stack)
int stackpop(struct stack* stack,int *data)
struct link* tmp = stack->head;
*data = stack->head->data;
stack->head = stack->head->next;
free(tmp);
--stack->size;
return 1;
}void stackcleanup(struct stack* stack)
stack->size = 0;
}int main()
while(!stackempty(&stack))
printf("\n");
return 0;
}
棧的插入是沒必要用頭結點的,因為每一步插入都一樣
但是刪除不能這樣,要判斷是否為空,如果是有頭結點就沒有必要,但是這個影響不是很大
c++**:
#include using namespace std;
class stack
};public:
//c++中會把0作為空指標的
stack():head_(0),size_(0)
void push(const int data)
bool pop(int& data)
link *tmp = head_;
data = head_->data_;
head_ = head_->next_;
delete tmp;
--size_;
return true;
} bool empty()
~stack()
size_ = 0;
}private:
link *head_;
int size_;
};int main(void)
//while (!stackempty(&stack))
while (!stack.empty())
這樣子的書寫規範
4、型別的擴充,比如類型別stack stack和int a很像
5、資料封裝,能夠保護內部的資料結構不遭受外部的破壞,比如說head_
從乙個例項看程式設計水平的步步提高
很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...
《從乙個例項看程式設計水平的步步提高》
很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...
從乙個例項看程式設計水平的步步提高
很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...