首页 > 代码库 > 从两端生长的双向栈-C语言版
从两端生长的双向栈-C语言版
<pre name="code" class="cpp">[cpp] 简单双端栈的应用 源文件部分: #include <stdio.h> #define MaxStackSize 100 typedef int DataType; int len,x; #include"SeqStack.h" int main() { SeqStack myStack; int i,n,m; StackInitiate(&myStack); for(i=0;i<10;i++) StackPush(&myStack,i+1,1); StackPrint(myStack,1); StackPrint(myStack,2); printf("请输入你要插入的元素以及要插入的几号栈:\n"); scanf("%d%d",&n,&m); StackPush(&myStack,n,m); printf("插入后得到如下序列:\n"); StackPrint(myStack,1); StackPrint(myStack,2); StackPop(&myStack,&x,m); StackTop(myStack,&x,m); printf("删除后得到如下序列:\n"); StackPrint(myStack,1); StackPrint(myStack,2); return 0; } 头文件部分: typedef struct { DataType stack[MaxStackSize]; //栈的申明定义 int top1; int top2; }SeqStack; void StackInitiate(SeqStack *S) //栈的初始化操作 { S->top1=0; //不舍弃数组的存储单元 ---第二种方法 S->top2=MaxStackSize-1; } int StackNotEmpty(SeqStack S,DataType where) //判空 { if(where==1) { if(S.top1<=0) //判空 return 0; return 1; } else { if(S.top2>=MaxStackSize-1) return 0; return 1; //不符合就未空 } } int StackPush(SeqStack *S,DataType x,DataType where) //入栈 { if(S->top1+1==S->top2) //判满 { printf("堆栈已满无法插入!\n"); return 0; } else //未满则进行插入操作 { if(where==1) { S->stack[S->top1]=x; S->top1++; } else //选择插入的栈号进行插入操作 { S->stack[S->top2]=x; S->top2--; } } return 1; } int StackPop(SeqStack *S,DataType *d,DataType where) //出栈 { if(where==1) { if(S->top1<=0) { printf("1号栈是空的,无数据元素出栈!\n"); return 0; } S->top1--; *d=S->stack[S->top1]; } else { if(S->top2>=MaxStackSize-1) { printf("2号栈是空的,无数据元素出栈!\n"); return 0; } S->top2++; *d=S->stack[S->top2]; } return 1; } int StackTop(SeqStack S,DataType *d,DataType where) //返回栈顶元素 { if(where==1) { if(len<=0) { printf("1号栈已空无数据元素出栈!\n"); return 0; } *d=S.stack[len-1]; } else { if(len>MaxStackSize-1) { printf("2号栈已空无数据元素出栈!\n"); return 0; } *d=S.stack[len+1]; } return 1; } //使用时忘记保存头文件代码会造成什么错误 void StackPrint(SeqStack S,DataType where) //打印函数 { if(where==1) { len=S.top1; if(len<=0) { printf("1号栈已空,无元素输出.\n"); return ; } printf("1号栈内元素如下:\n"); while(len>0) { StackTop(S,&x,1); printf("%d ",x); len--; } printf("\n"); return ; } else { len=S.top2; if(len>=MaxStackSize-1) { printf("2号栈已空无数据元素出栈!\n"); return ; } printf("2号栈内元素如下:\n"); while(len<MaxStackSize-1) { StackTop(S,&x,2); printf("%d ",x); len++; } printf("\n"); return ; } return ; }
从两端生长的双向栈-C语言版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。