黑马程序员技术交流社区
标题:
C#数据结构之栈结构(1)
[打印本页]
作者:
荣右铭
时间:
2013-10-11 22:12
标题:
C#数据结构之栈结构(1)
struct myStack{
public object []stackArray;
public int top;
}
class Program
{
static void Main(string[] args)
{
myStack st1;
string strName;
initStack(out st1);
Console.WriteLine("请输入一个想要反序的字符串");
strName = Console.ReadLine();
for (int i = 0; i < strName.Length; i++)
{
pushStack(ref st1, strName[i]);
}
Console.WriteLine("反序后的结果为:");
while (st1.top != 0)
{
Console.Write((char)popStack(ref st1));
}
Console.Write("\n");
}
static void initStack(out myStack st)
{//初始化堆栈,分配内存
st = new myStack();
st.stackArray = new object[64];
}
static void pushStack(ref myStack st, object e)
{//将任意类型的元素压入栈
if (st.top == st.stackArray.Length)
{
Console.WriteLine("栈空间已满");
return;
}
st.stackArray[++st.top] = e;
}
static object readStackTop(myStack st){//读取栈顶元素
object e=new object();
e = st.stackArray[st.top];
return e;
}
static object popStack(ref myStack st)
{//弹出一个栈内元素
object e = new object();
if (st.top == 0)
{
Console.WriteLine("栈元素已清空");
return "";
}
e = st.stackArray[st.top--];
return e;
}
这里用结构体和数组做了一个简单的栈结构,其实还有另外一种栈结构叫做链栈,如果大家昨天看过我链表的帖子,可以回忆一下链表的操作方法有哪些,链栈就是仅限于插入头节点,删除头节点两种操作的链表
栈在计算机中的应用极为广泛,由于其先进后出的特性,普遍用于暂存函数的参数和局部变量,也用于CPU在进程切换时保存现场和恢复现场,栈的操作一般只有两种:进栈(也可以说成压栈,因为先进栈的会被压在底部),即把栈指针加1,然后把一个变量放进栈中,出栈,读取一个变量,然后把栈指针减1,当栈指针为0时,即为空栈。
本例中使用了object类型,我们知道,object类型的参数可以接受任何类型,所以有比较好的通用性
给字符串反序仅仅是栈的一种简单用法,下一贴,我会写一个稍微复杂一点的应用给大家,感谢亲们的支持
作者:
leayon
时间:
2013-10-11 22:26
本帖最后由 leayon 于 2013-10-11 22:27 编辑
顶个!看来你的C语言学得很不错啊,佩服佩服!这东西我前一阵子研究过,表示很纠结!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2