從乙個物件例項看資料抽象與封裝

2021-06-20 14:18:34 字數 1628 閱讀 9240

本章目標: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_

從乙個例項看程式設計水平的步步提高

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...

《從乙個例項看程式設計水平的步步提高》

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...

從乙個例項看程式設計水平的步步提高

很久很久前就想寫這個話題的文章了,但是,總是找不到合適的例子。例子簡單不足於說明問題,例子複雜可讀性就會降低,就會達不到文章的目的。兩難總讓人激發解決問題的鬥志,於是乎自己試著寫寫這個例子吧。這個例子就是學籍管理中增加學籍資訊的乙個功能。我想通過這個例子的不同的解決思路,來說明程式設計的層次步步提高...