栈链式结构简单操作
關于棧的鏈式存儲結構,下面用的是單鏈表頭插法創建棧,因為頭插法的特點是在頭結點(frist)與NULL空結點(first ->next)之間插入各結點,存儲數據的入棧順序和出棧順序是相反的,和棧的
特點很相似,工作指針如top指針一樣,始終指向棧頂(第一個結點)。下代碼如有不當之處,請指正!
#include<iostream>
//#include<stdlib.h>
using namespace std;
struct Stack {
????int data;
????struct Stack *next;
};
Stack *CreatStack() {
????Stack *p;
????p = new Stack; //p = (Stack *)malloc(sizeof(Stack));
????p->data = NULL; ?//頭結點不存放數據域
????p->next = NULL; //棧底
????return p;
}
Stack *PushStack(Stack *p) {
????Stack *q;
????cout << "進棧順序:" << endl;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //下面用頭插法構建鏈式棧,和單鏈表的頭插法沒有區別 ????for (int i = 0; i < 9; i++) {
????????q = new Stack; ??
????????q->data = i;
????????cout << q->data << "-->";
????????q->next = p->next;
????????p->next = q;
????}
????cout << "進棧結束" << endl;
????return p;
}
void PrintStack(Stack *p) { ?//出棧
????cout << "出棧順序:" << endl;
????p = p->next;
????for (p->next; p != NULL; p = p->next) {
????????cout << p->data << "-->";
????}
????cout << "出棧結束" << endl;
}
void InsertStack(Stack *first,int x) { ? ?//在棧頂插入結點
????Stack *p;
????p = new Stack;
????p->data = x;
????p->next = first->next;
????first->next = p;
}
void DestoryStack(Stack *first) { ?//銷毀棧
???? do{
????????Stack *p;
????????p = first;
????????first = first->next;
????????delete p; ?//該步一定要在上面步驟之后
? ? ? ? p = NULL; ?//避免出現迷途指針 ????????
???? } while (first != NULL);
????cout << "鏈棧已銷毀" << endl;
}
int main() {
????Stack *p,*s;
????p = CreatStack();
????s = PushStack(p);
????//InsertStack(s, 11);
????DestoryStack(s);
????//PrintStack(s);
}
特點很相似,工作指針如top指針一樣,始終指向棧頂(第一個結點)。下代碼如有不當之處,請指正!
點擊(此處)折疊或打開
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/29876893/viewspace-1814930/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/29876893/viewspace-1814930/
總結
- 上一篇: Linux系统检测工具
- 下一篇: vimdiff用法