//DubSqStack.cpp
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define MAXSIZE 10
#define DUSTACKSIZE MAXSIZE
typedef int SElemType ;
typedef struct DuSqStack
{ SElemType data[MAXSIZE-1]; //array[0..MAXSIZE-1] for the DuSqStack
int top1; //top1 is the pointer of DuSqStack S1
int top2; //top2 is the pointer of DuSqStack S2
int flag; //if flag variable=1 then operate S1
}DuSqStack; //else if flag=2 then operate S2
void InitDuSqStack(DuSqStack &S) //InitDuSqStack() function
{ S.top1=1;
S.top2=MAXSIZE-2; //Initialize the Pointers of DuSqStack
}//end of InitDuSqStack() function
int DuSqStackPush(DuSqStack &S,SElemType x) //DuSqStackPush() function
{ //S is a shared stack this function will push x into stack S
cout<<"Please input the element x: <eg. 2001> ";
cin>>x;
if(S.top1+1==S.top2) //if the two stack are full, then return error
{ cout<<endl<<"The DuSqStack is full!"<<endl;
return (0);
}
else
{ cout<<"Select the stack S1 or S2 to push ? <1 or 2>: ";
cin>>S.flag;
if ((S.flag!=1)&&(S.flag!=2)) //flag == 1 or 2 ? otherwise return 0
{cout<<endl<<"Error!"<<endl<<"the stack needs to be '1' or '2'!"<<endl;
return(0);
}
else
{ switch(S.flag)
{ case 1:
S.data[S.top1]=x;
S.top1++;
break;
case 2:
S.data[S.top2]=x;
S.top2--;
break;
}//end of switch
cout<<"'"<<x<<"'"<<" has been pushed into DuSqStack successfully!"<<endl<<endl;
return (1);
}//end of else
}//end of else
}//end of DuSqStackPush() function
int DuSqStackPop(DuSqStack &S,SElemType &x)
{ //S is a shared stack
//this function will pop the top element
//from S.top1 or S.top2 by x
cout<<endl<<"Select the stack S1 or S2 to POP ? (1,2): ";
cin>>S.flag;
if((S.flag!=1)&&(S.flag!=2)) //if S.flag!=1,2 then ERROR
{ cout<<endl<<"The DuSqStack is full!"<<endl;
return (0);
}
else
{switch(S.flag)
{case 1:
if(S.top1>1) //if S1 is not empty then operate S1
{S.top1--; //modify stack top pointer S.top1
x=S.data[S.top1]; //pop x
}//end of if
else
{cout<<"S1 is an empty stack,failure to POP element from it!"<<endl;
return(0);
}
break;
case 2:
if(S.top2<MAXSIZE-2)
{S.top2++;
x=S.data[S.top2];
}//end of if
else
{cout<<"S2 is an empty stack,failure to POP element from it!"<<endl;
return(0);
}
break;
}//end of switch
cout<<"Success to POP the element "<<"from DuSqStack!: "<<x<<endl<<"...OK...!"<<endl;
return (1);
}//end of else
}//end of DuSqStackPop() function
void main() //main() function
{
DuSqStack S;
SElemType x=2000; //push x into DuSqStack S
cout<<"DuSqStack.cpp"<<endl<<"============="<<endl<<endl;
InitDuSqStack(S); //To Initilaize DuSqStack
DuSqStackPush(S,x); //Test DuSqStackPush function twice
DuSqStackPush(S,x); //for example to push two element into DuSqStack
DuSqStackPop(S,x); //Test DuSqStackPop function
//and return by x
getch();
}
数据结构C语言版源码第三章
需积分: 0 32 浏览量
更新于2008-09-20
收藏 15KB RAR 举报
数据结构是计算机科学中的核心课程之一,它主要研究如何在计算机中高效地组织和管理数据。C语言作为底层编程语言,常被用于实现各种数据结构,因为它提供了对内存的直接控制,可以更深入地理解数据结构的内部工作原理。本资料“数据结构C语言版源码第三章”聚焦于数据结构的特定部分,即第三章,可能涵盖了栈、队列、链表、树等基础数据结构中的一种或多种。
在数据结构中,第三章通常会讲解线性数据结构,如栈和队列。栈是一种后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等场景。队列则是先进先出(FIFO)的数据结构,适用于任务调度、打印队列等。在C语言中,这些可以通过数组或指针来实现。
1. **栈**:栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(top)。在C语言中,可以使用动态分配的数组或者链表来创建栈。源码可能会展示如何通过调整指针实现栈的扩容和缩容。
2. **队列**:队列的基本操作有入队(enqueue)、出队(dequeue)以及查看队首元素。C语言中,固定大小的数组可以表示有限大小的队列,而链表则可实现无限大小的队列。源码会涉及如何在数组两端操作元素,以及链表节点的插入和删除。
3. **链表**:链表是另一种重要的线性数据结构,它不依赖于数组的连续内存空间。链表包含节点,每个节点包含数据和指向下一个节点的指针。在C语言中,链表的插入、删除和遍历都需要通过指针操作来实现。
4. **树**:虽然不是所有第三章都会讲到树,但部分教材可能会引入二叉树的概念,如二叉搜索树,它的特性是左子树上的所有节点都小于根节点,右子树上的所有节点都大于根节点。在C语言中,树的实现需要用到结构体和指针,以构建节点间的层级关系。
在阅读和学习这些源码时,你需要关注以下几个方面:
- 数据结构的定义:如何用C语言定义栈、队列、链表或树的结构。
- 动态内存管理:何时使用`malloc`和`free`进行内存分配和释放。
- 指针操作:如何通过指针操作实现数据结构的插入、删除、查找等基本操作。
- 错误处理:源码中是否包含了对潜在错误的处理,如内存溢出、空指针引用等。
通过深入理解和实践这些源代码,你可以更深入地理解数据结构的内在逻辑,这对于提升编程能力和解决复杂问题至关重要。同时,这也是为后续学习更高级的数据结构,如图、哈希表、堆等打下坚实基础的关键步骤。
superyangtze
- 粉丝: 4
- 资源: 7
最新资源
- M6550、M6600系列.pdf
- BM2300.pdf
- 小红薯&聚光平台全攻略:零基础掌握信息流投放,打造高效广告策略.mp4
- Pantum M6200-6500系列维修手册 V1.5.pdf
- 新能源电动汽车VCU hil BMS hil硬件在环仿真 文件包含电动汽车整车建模说明书, 模型包含驾驶员模块,仪表模块,BCU整车控制器模块,MCU电机模块,TCU变速箱模块,减速器模块,BMS电池
- 大数据技术栈实验教程:涵盖VirtualBox到Flink全流程安装与编程实践指南
- 项目管理领域PMBOK第七版指南-核心原则、绩效域及实践工具详解
- Ubuntu20.04安装指南:物理机与虚拟机环境下从零开始搭建Linux环境
- Pantum BP5100、BP5200系列.pdf
- p4000.pdf
- P5500系列.pdf
- Pantum P3010-3060、P3300系列维修手册 V1.4.pdf
- Pantum P3100-3200、P3400系列维修手册.pdf
- 影视解说最新玩法,AI生成剧中人物独白原创解说视频,操作简单,轻松上....mp4
- BP4000系列.pdf
- p3000系列.pdf