顺序栈和链栈的几个基本操作

mac2024-05-08  35

用c++写的,初始化的时候一定要在形参列表里加上引用操作符(&),要么初始化就用双重指针进行操作。

因为:对谁操作(想要改变谁的值),就要得到谁的地址。如果不加上&的话,就无法改变 main函数里的 指针 s 的值,改变的只是形参的值。


 

目录

顺序栈:

         链栈


 

顺序栈:

//要注意初始化时,形参的那个引用符号(&)必须要加上!否则初始化就用双指针来做! //其他操作的函数在形参列表里可以不用加上引用符号(&) #include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> const int MaxSize=100; typedef struct { int data[MaxSize]; int top; }SqStack; //初始化,就是给指针分配一个空间 void InitStack(SqStack *&s) { s=(SqStack*)malloc(sizeof(SqStack)); s->top=-1; } //销毁栈 void DestoryStack(SqStack *s) { free(s); } //入栈操作 bool Push(SqStack *s,int element) { if(s->top==MaxSize-1) return false; else { s->top++; s->data[s->top]=element; return true; } } //出栈操作 bool Pop(SqStack *s) { if(s->top==-1) return false; else s->top--; return true; } //取栈顶元素 bool GetTop(SqStack *s,int *element) { if(s->top==-1) return false; else { *element=s->data[s->top]; return true; } } int main() { SqStack* s; InitStack(s); int *element; int a[]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<9;i++) { Push(s,a[i]); } while(GetTop(s,element)) { Sleep(600); printf("%d\n",*element); Pop(s); } return 0; }

链栈:

//带头结点的单链表 //根据栈的特性,肯定是用的头插法 #include<iostream> #include<windows.h> using namespace std; typedef struct linknode { int data; linknode *next; }LinkStack; void InitStack(LinkStack *&s) { s=(LinkStack*)malloc(sizeof(LinkStack)); s->next=NULL; } void DestoryStack(LinkStack *s) { LinkStack *pre,*p; pre=s; p=pre->next; while(p!=NULL) { free(p); pre=p; p=pre->next; } free(pre); } void Push(LinkStack *s,int e) { LinkStack *p=(LinkStack*)malloc(sizeof(LinkStack)); p->data=e; p->next=s->next; s->next=p; } bool Pop(LinkStack *s) { if(s->next==NULL) return false; LinkStack *p=s->next; s->next=s->next->next; free(p); return true; } bool GetTop(LinkStack *s,int *e) { if(s->next==NULL) return false; *e=s->next->data; return true; } int main() { LinkStack *s; InitStack(s); int a[]={1,2,3,4,5,6,7,8,9}; int *element; for(int i=0;i<9;i++) { Push(s,a[i]); } while(GetTop(s,element)) { Sleep(600); printf("%d\n",*element); Pop(s); } return 0; }

 

最新回复(0)