黑马程序员技术交流社区

标题: 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