数据结构-栈

// 栈 是限定在表尾进行插入和删除操作的线性表
// 队列是值允许在一端插入,一端删除操作的线性表 
#include<stdio.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct SqStack{
	SElemType data[MAXSIZE];
	int top;
}SqStack; 

//插入元素e为新的栈顶元素
Status Push(SqStack *S,SElemType e){
	if(S->top == MAXSIZE-1){//栈满
		return ERROR;
	}
	S->top++;
	S->data[S->top]=e;
	return OK;
} 

//出栈操作 删除S的栈顶元素,用e返回值
Status Pop(SqStack *S,SElemType *e){
	if(S->top==-1){
		return ERROR;
	}
	*e=S->data[S->top];
	S->top--;
	return OK;
}

  

//两栈共享空间
#include<stdio.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct SqDoubleStack{
    SELemType data[MAXSIZE];
    int top1;
    int top2;
}SqDoubleStack; 
//插入元素值 stackNumber 判断是栈1还是栈2 
Status Push(SqDoubleStack *S,SElemType e,stackNumber){
    if(S->top1+1=S->top2){
        return ERROR;//栈满 
    }
    if(stackNumber==1){
        S->data[++S->top1] =e;
    } else if(stackNumber==2){
        S->data[--S->top2]=e;
    }
    return OK;
} 
// 若栈不空,删除S栈顶元素,用e返回其值
Status Pop(SqDoubleStack *S,SELemType *e,int stackNumber){
    if(stackNumber==1){
        if(S->top1==-1){
            return ERROR;
        }
        *e=S->data[S->top1--];
    }else if(stackNumber==2){
        if(S->top2==MAXSIZE){
            return ERROR;
        }
        *e=S->data[S->top2++];
    } 
    return OK;
} 
//栈的链式存储 
#include<stdio.h>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct StackNode{//为结点 
    SELemType data;
    struct StackNode *next;
}StackNode,*LinkStackPtr;

typedef  struct LinkStack{//设置链栈 
    LinkStackPtr top;
    int count;
}LinkStack;
//插入元素e为新的栈顶元素
Status Push (LinkStack *S,SElemType e){
    LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
    s->data=e;
    s->next=S->top;//把当前栈顶元素赋值给新节点的直接后继
    S->top=s;
    S->count++;
    return OK; 
} 

//删除栈顶元素,用e返回其值 
Status Pop(LinkStack *S,SElemType e){
    LinkStackPtr p;
    if(StackEmpty(*S)) {
        return ERROR;
    }
    *e=S->top->data;
    p=S->top;
    S->top=S->top->next;
    free(p);
    S->count--;
    return OK;
} 

 

posted @ 2021-01-20 11:20  wyqgzq  阅读(41)  评论(0)    收藏  举报