从两端生长的双向栈-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 ;
}

				
时间: 2024-11-06 13:02:36

从两端生长的双向栈-C语言版的相关文章

【小白成长撸】--链栈(C语言版)

1 // 链栈.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include <stdio.h> 6 #include <stdlib.h>//malloc的头文件 7 8 typedef struct line_stack//栈包装 9 { 10 int x; 11 struct line_stack *next; 12 }link; 13 14 void pushes(link **top, int

【小白成长撸】--顺序栈(C语言版)

1 // 顺序栈.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h"//test1.0--栈表仅限Int类型 5 #include <stdio.h> 6 7 #define true 1 8 #define false 0 9 10 typedef struct stack_type 11 { 12 int stack[100];//最大容纳100个元素 13 int top; 14 }stacktype; 15 16 in

链栈-C语言版

#include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; typedef struct stacknode                           ///结构节点的定义 { int data; struct stacknode *next; }StackNode,*LinkStack; int StackEmpty(LinkStack top)          

双向循环链表-C语言版

源文件部分: #include<stdio.h> #include<string.h> #include<malloc.h> typedef int Elemtype; #include"Delist.h" int main() { Dlnode head=NULL; instruction(head); return 0; } 头文件部分: typedef struct DLnode { Elemtype data; struct DLnode *

顺序栈的栈基本操作(C语言版)

由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不支持 ,C++才支持,所以用 C语言写就需要使用指针 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 1

Java从0到全栈-Java语言概述与开发环境搭建

Java从0到全栈-Java语言概述与开发环境搭建 Java从0到全栈 Java语言概述 Java发展历史 Java之父-James Golsing 起源 1991年,SUN(Standford University Network)公司的James Golsing领导的工程师小组想要开发一种用于像电视机.微波炉.电话这样的消费类电子产品的小型计算机语言,该产品的特点是由于不同的厂商选择不同的CPU和操作系统,因此要求该语言不能和特定的体系结构绑定在一起,也就是跨平台的.最初将这个语言命名为Oa

C语言版数据结构算法

C语言版数据结构算法 C语言数据结构具体算法 https://pan.baidu.com/s/19oLoEVqV1I4UxW7D7SlwnQ C语言数据结构演示软件 https://pan.baidu.com/s/1u8YW897MjJkoOfsbHuadFQ 在上一篇的FIFO中就是基于数据结构思维中的队列实现的,而基本的数据结构内容还有 算法效率分析.线性表.栈和队列.串.数组和广义表.树和二叉树.图.查表.排序.动态存储管理 上面两个链接就是<数据结构(C语言版)>严蔚敏教授严奶奶的书籍

《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

先附上文档归类目录: 课本源码合辑  链接??? <数据结构>课本源码合辑 习题集全解析  链接??? <数据结构题集>习题解析合辑 博主有话说: 01.自学编程,难免思路阻塞,所以从今天起,我(StrayedKing)决定在本博客陆续更新严蔚敏,吴伟民版<数据结构-C语言版>各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步.        ★注★ 左侧随笔分类下用两个栏目:<课本源码>.<习

人事管理系统 c语言版

int menu(){ printf("请按提示输入完成操作!\n"); printf("1.查询员工信息\n"); printf("2.统计员工数量\n"); printf("3.录入员工信息\n"); printf("4.删除员工信息\n"); printf("5.按id排序所有员工\n"); printf("6.打印所有员工信息\n"); printf(&quo