使用連結串列實現棧的 C++ 程式
棧是一個包含元素集合的抽象資料結構。棧實現了 LIFO 機制,即最後壓入的元素最先彈出。棧中的一些主要操作包括:
Push(壓入) - 將資料值新增到棧頂。
Pop(彈出) - 刪除棧頂的資料值。
Peek(檢視) - 返回棧頂的資料值。
下面給出一個使用連結串列實現棧的程式。
示例
#include <iostream> using namespace std; struct Node { int data; struct Node *next; }; struct Node* top = NULL; void push(int val) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = val; newnode->next = top; top = newnode; } void pop() { if(top==NULL) cout<<"Stack Underflow"<<endl; else { cout<<"The popped element is "<< top->data <<endl; top = top->next; } } void display() { struct Node* ptr; if(top==NULL) cout<<"stack is empty"; else { ptr = top; cout<<"Stack elements are: "; while (ptr != NULL) { cout<< ptr->data <<" "; ptr = ptr->next; } } cout<<endl; } int main() { int ch, val; cout<<"1) Push in stack"<<endl; cout<<"2) Pop from stack"<<endl; cout<<"3) Display stack"<<endl; cout<<"4) Exit"<<endl; do { cout<<"Enter choice: "<<endl; cin>>ch; switch(ch) { case 1: { cout<<"Enter value to be pushed:"<<endl; cin>>val; push(val); break; } case 2: { pop(); break; } case 3: { display(); break; } case 4: { cout<<"Exit"<<endl; break; } default: { cout<<"Invalid Choice"<<endl; } } }while(ch!=4); return 0; }
輸出
1) Push in stack 2) Pop from stack 3) Display stack 4) Exit Enter choice: 1 Enter value to be pushed: 2 Enter choice: 1 Enter value to be pushed: 6 Enter choice: 1 Enter value to be pushed: 8 Enter choice: 1 Enter value to be pushed: 7 Enter choice: 2 The popped element is 7 Enter choice: 3 Stack elements are:8 6 2 Enter choice: 5 Invalid Choice Enter choice: 4 Exit
在上面的程式中,結構體 Node 用於建立作為棧實現的連結串列。程式碼如下所示。
struct Node {
int data;
struct Node *next;
};push() 函式接收引數 val,即要壓入棧的值。然後建立一個新節點,並將 val 插入到資料部分。此節點新增到連結串列的前面,並且 top 指向它。此部分的程式碼片段如下所示。
void push(int val) { struct Node* newnode = (struct Node*) malloc(sizeof(struct Node)); newnode->data = val; newnode->next = top; top = newnode; }
pop() 函式彈出棧頂的值(如果存在)。如果棧為空,則列印下溢錯誤。程式碼如下所示。
void pop() { if(top==NULL) cout<<"Stack Underflow"<<endl; else { cout<<"The popped element is "<< top->data <<endl; top = top->next; } }
display() 函式顯示棧中的所有元素。這是透過使用 ptr 實現的,ptr 最初指向 top,但會遍歷到棧的末尾。列印與 ptr 對應的所有資料值。程式碼如下所示。
void display() {
struct Node* ptr;
if(top==NULL)
cout<<"stack is empty";
else {
ptr = top;
cout<<"Stack elements are: ";
while (ptr != NULL) {
cout<< ptr->data <<" ";
ptr = ptr->next;
}
}
cout<<endl;
}main() 函式向用戶提供一個選擇,詢問他們是否要壓入、彈出或顯示棧。根據使用者的響應,使用switch 呼叫相應的函式。如果使用者輸入無效的響應,則列印錯誤資訊。此部分的程式碼片段如下所示。
int main() { int ch, val; cout<<"1) Push in stack"<<endl; cout<<"2) Pop from stack"<<endl; cout<<"3) Display stack"<<endl; cout<<"4) Exit"<<endl; do { cout<<"Enter choice: "<<endl; cin>>ch; switch(ch) { case 1: { cout<<"Enter value to be pushed:"<<endl; cin>>val; push(val); break; } case 2: { pop(); break; } case 3: { display(); break; } case 4: { cout<<"Exit"<<endl; break; } default: { cout<<"Invalid Choice"<<endl; } } }while(ch!=4); return 0; }
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP