数据结构
栈
顺序栈
-
顺序栈与顺序链表差不多,初始化时都要有一个一维数组和一个用来存放下标的变量(可以理解为指针)
-
顺序栈已满和已空的标志:
top==MAXsize-1//已满 top==-1;//已空
顺序栈的定义
typedef struct stack { elemtype elem[Maxsize]; int top; }stack;
-
顺序栈的初始化非常简单,就是将top=-1即可
-
进栈操作
void push(stack *&s,elemtype e) { if(s->top==Maxsize-1) printf("栈已经满了\n");//栈已满的标志 else { s->top++; s->elem[s->top]=e; } }
-
出栈操作也比较简单,就是将top–即可
链栈
-
链栈和链表差不多,如果初始化是不是要申请空间吗,如果申请的指针指向的空间为NULL时,即操作失败
-
链栈的定义
int InitStack(Stack *s) { if (NULL == s) { return FAILURE;//申请空间失败 } s->next=NULL;//相当于有一个栈头,栈头的下一个栈节点的地址为空,初始化后的栈都可以看作空栈,这也是判断栈是否为空的标志,即栈头指针->next==NULL; return SUCCESS; }
-
栈的定义—大同小异哈
typedef struct Stack //表示栈信息 { double data; struct Stack *next; }Stack;
-
链栈进栈操作
int push(Stack *s, double num) { if (NULL == s) { return FAILURE; } Stack *temp; temp=(Stack *)malloc(sizeof(Stack)); if (temp==NULL) { return FAILURE; } temp->data = num; temp->next = s->next; s->next=temp; return SUCCESS; }
-
链栈的出栈操作
double pop(Stack *s) { if (NULL == s)//表示该栈不存在 { return FAILURE; } if (s->next== NULL) //空栈不能出栈 { return FAILURE; } Stack *temp; temp=s->next; s->next=temp->next; double data=temp->data; free(temp); return data; }
-
取栈顶元素
double GetTop(Stack *s) { if(NULL == s) { return FAILURE; } if(s->next==NULL) { return FAILURE; } return s->next->data;//只有这句代码实际有效哈哈哈 }