线性表链式表示的C#实现(参考数据结构(C语言版))

实现部分
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace CA_HomeWork_1
  6{
  7    enum returnValue
  8    {
  9        TRUE = 1,
 10        FALSE = 0,
 11        OK = 1,
 12        ERROR = 0,
 13        INFEASIBLE = -1,
 14        OVERFLOW = -2
 15    }

 16
 17    public class LinkList
 18    {
 19        public LinkList Next;
 20        public int data;
 21    }

 22
 23    public class List
 24    {
 25        static void Main(string[] args)
 26        {
 27            LinkList La = new LinkList();
 28            LinkList Lb = new LinkList();
 29            LinkList Lc = new LinkList();
 30            Initlist(ref La);
 31            ShowList(La);
 32            Initlist(ref Lb);
 33            ShowList(Lb);
 34            Initlist(ref Lc);
 35            MergeList(La, Lb, ref Lc);
 36            ShowList(Lc);
 37            return;
 38        }

 39
 40        private static returnValue Initlist(ref LinkList L)
 41        {
 42            int i, n;
 43            LinkList p, s;
 44            Console.Write("pleast input the list's Elem Number:");
 45            n = Convert.ToInt32(Console.ReadLine());
 46            L.Next = null;
 47            p = L;
 48            for (i = 1; i <= n; i++)
 49            {
 50                s = new LinkList();
 51                s.Next = null;
 52                Console.Write("please input {0} Elem:", i);
 53                s.data = int.Parse(Console.ReadLine());
 54                p.Next = s;
 55                p = s;
 56            }

 57            return (returnValue.OK);
 58        }

 59
 60        private static int ListLength(LinkList L)
 61        {
 62            int i = 0;
 63            LinkList p;
 64            p = L;
 65            while (p.Next != null)
 66            {
 67                p = p.Next;
 68                i++;
 69            }

 70            return (i);
 71        }

 72
 73        private static returnValue GetElem(LinkList L, int i, out int e)
 74        {
 75            LinkList p;
 76            int j = 1;
 77            e = 0;
 78            p = L.Next;
 79            while ((p != null&& (j < i))
 80            {
 81                p = p.Next;
 82                j++;
 83            }

 84            if ((p == null|| (j > i)) return (returnValue.ERROR);
 85            e = p.data;
 86            return (returnValue.OK);
 87        }

 88
 89        private static returnValue ListInsert(ref LinkList L, int i, int e)
 90        {
 91            LinkList p, s;
 92            int j = 0;
 93            p = L;
 94            j = 0;
 95            while ((p != null&& (j < i - 1))
 96            {
 97                p = p.Next;
 98                j++;
 99            }

100            if ((p == null|| (j > i - 1)) return (returnValue.ERROR);
101            s = new LinkList();
102            s.data = e;
103            s.Next = p.Next;
104            p.Next = s;
105            return (returnValue.OK);
106        }

107
108        private static void ShowList(LinkList L)
109        {
110            LinkList p;
111            p = L.Next;
112            Console.Write("This list is: ");
113            while (p != null)
114            {
115                Console.Write("{0} ", p.data);
116                p = p.Next;
117            }

118            Console.Write("\n");
119            return;
120        }

121
122        private static void MergeList(LinkList La, LinkList Lb, ref LinkList Lc)
123        {
124            int i, j, k, La_len, Lb_len;
125            int ai, bj;
126            i = 1;
127            j = 1;
128            k = 0;
129            La_len = ListLength(La);
130            Lb_len = ListLength(Lb);
131            while ((i <= La_len) && (j <= Lb_len))
132            {
133                GetElem(La, i, out ai);
134                GetElem(Lb, j, out bj);
135                if (ai <= bj)
136                {
137                    ListInsert(ref Lc, ++k, ai);
138                    ++i;
139                }

140                else
141                {
142                    ListInsert(ref Lc, ++k, bj);
143                    ++j;
144                }

145            }

146            while (i <= La_len)
147            {
148                GetElem(La, i++out ai);
149                ListInsert(ref Lc, ++k, ai);
150            }

151            while (j <= Lb_len)
152            {
153                GetElem(Lb, j++out bj);
154                ListInsert(ref Lc, ++k, bj);
155            }

156            return;
157        }

158
159        //建立单链表(头插法)
160        //注:生成的链表中结点的次序和输入的顺序相反
161        private void CreateList(ref LinkList L, int n)
162        {
163            L.Next = NULL;
164            for (i = n; i > 0--i)
165            {
166                LinkList p = new LinkList();
167                p.data = int.Parse(Console.ReadLine());
168                p.Next = L.Next;
169                L.Next = p;
170            }

171            return;
172        }

173    }

174}

有许多不足之处,希望见者指评,谢谢!

转载于:https://www.cnblogs.com/williamlyf/archive/2008/05/14/1197356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值