/// <summary> /// 登录操作队列处理 /// </summary> private void LoginQueueWork() { while (true) { //出队 var item = QueueLogin.DeQueue(); if (null != item) { UserLoginRecords records = new UserLoginRecords { AreaID = item.AreaID, AreaName = item.AreaName, Latitude = item.Latitude, LoginTime = item.LoginTime.ToDateTime(), Longitude = item.Longitude, RecordID = IDProvider.NewId(), TerminalDevice = item.TerminalDevice, UserID = item.UserID }; //更新用户信息 ServicesProvider.Items.UserService.UpdateLastInfo(item.UserID, item.UserName, item.UserType, item.AreaName, item.LoginTime.ToDateTime()); //记录登录操作信息 ServicesProvider.Items.UserLoginRecordService.AddRecord(records); } //避免无数据操作时CPU空转 Thread.Sleep(100); } }
/// <summary> /// 未发送出去消息队列处理 /// </summary> private void UnsendQueueWork() { while (true) { //出队 var item = QueueUnSendToDB.DeQueue(); if (null != item) { UnSendMessage message = new UnSendMessage { Content = item.Content, MessageID = IDProvider.NewId(), MessageType = item.MessageType, ReceiverID = item.ReceiverID, SenderID = item.SenderID, SenderName = item.SernderName, SendTime = item.SendTime.ToDateTime() }; //写入数据库 ServicesProvider.Items.UnsendMessageService.AddMessage(message); } //避免无数据操作时CPU空转 Thread.Sleep(100); } }
/// <summary> /// 待写入消息历史的队列处理 /// </summary> private void WriteToHistoryQueueWork() { while (true) { //出队 var item = QueueWriteToHistory.DeQueue(); if (null != item) { var userNameDic = ServicesProvider.Items.UserService.GetUserName(new[] { item.SenderID, item.ReceiverID }); MessageHistory message = new MessageHistory { Content = item.Content, MessageID = IDProvider.NewId(), MessageType = item.MessageType, ReadTime = item.SendTime.ToDateTime(), ReceiverID = item.ReceiverID, ReceiverName = userNameDic.ContainsKey(item.ReceiverID) ? userNameDic[item.ReceiverID] : item.ReceiverName, SenderID = item.SenderID, SenderName = userNameDic.ContainsKey(item.SenderID) ? userNameDic[item.SenderID] : string.Empty, SendTime = item.SendTime.ToDateTime() }; //写入数据库 ServicesProvider.Items.MessageHistoryService.AddMessage(message); } //避免无数据操作时CPU空转 Thread.Sleep(100); } }
static void Main(string[] args) { IQueue<string> queue = new LinkQueue<string>(); queue.EnQueue("a1"); queue.EnQueue("a2"); queue.EnQueue("a3"); while (queue.IsEmpty() == false) { Console.WriteLine(queue.QueueFront); queue.DeQueue(); } }
public void Test() { LinkQueue <int> stack = new LinkQueue <int>(); stack.EnQueue(1); stack.EnQueue(2); stack.EnQueue(3); Assert.Equal(1, stack.DeQueue()); Assert.Equal(2, stack.DeQueue()); Assert.Equal(3, stack.DeQueue()); stack.EnQueue(1); stack.EnQueue(2); Assert.Equal(1, stack.DeQueue()); Assert.Equal(2, stack.DeQueue()); stack.EnQueue(3); Assert.Equal(3, stack.DeQueue()); Assert.Equal(0, stack.DeQueue()); }
/// <summary> /// 待发送的消息队列 /// </summary> private void WaitSendQueueWork() { while (true) { //出队 var item = QueueWaitSend.DeQueue(); if (null != item) { IChannel channel = GetUserChannel(item.ReceiverID); //通道存在 if (null != channel) { //发送消息 Server.Send(item, channel); } } //避免无数据操作时CPU空转 Thread.Sleep(100); } }
/// <summary> /// �õ�AOV���������������� /// </summary> /// <returns>AOV����������������</returns> public string TopoSort() { string Result = string.Empty; int[] ID = GetInDegressList(); LinkQueue<int> LQ = new LinkQueue<int>(); for (int i = 0; i < vertexCount; i++) { if (ID[i] == 0) LQ.EnQueue(i); } if (LQ.Length == vertexCount) throw new Exception("������ͼ�������."); while (LQ.IsEmpty() == false) { int j = LQ.QueueFront; LQ.DeQueue(); Result += vertexList[j].VertexName + "\n"; EdgeNode p = vertexList[j].FirstNode; while (p != null) { ID[p.Index]--; if (ID[p.Index] == 0) { LQ.EnQueue(p.Index); } p = p.Next; } } int k; for (k = 0; k < vertexCount; k++) if (ID[k] != 0) break; return (k == vertexCount) ? Result : "��AOV���л�."; }
/// <summary> /// �õ���������������� /// </summary> /// <param name="startNodeName">���й��������������ʼ������</param> /// <returns>���������������</returns> public string BFSTraversal(string startNodeName) { string BFSResult = string.Empty; int i = GetIndex(startNodeName); if (i != -1) { for (int j = 0; j < vertexCount; j++) vertexList[j].Visited = false; vertexList[i].Visited = true; BFSResult += vertexList[i].VertexName + "\n"; LinkQueue<int> Q = new LinkQueue<int>(); Q.EnQueue(i); while (Q.IsEmpty() == false) { int j = Q.QueueFront; Q.DeQueue(); EdgeNode p = vertexList[j].FirstNode; while (p != null) { if (vertexList[p.Index].Visited == false) { vertexList[p.Index].Visited = true; BFSResult += vertexList[p.Index].VertexName + "\n"; Q.EnQueue(p.Index); } p = p.Next; } } } return BFSResult; }
static void Main(string[] args) { Console.WriteLine(Test(3)); #region 线性表测试 ////A<string> a = new A<string>(); //SingleLinkList<string> list1 = new SingleLinkList<string>(); //Console.WriteLine("是否是空表:{0}", list1.IsEmpty); //list1.Append("早上"); //ListPrint(list1); //Console.WriteLine(list1.GetLength); //list1.Insert("你好", 0); //ListPrint(list1); //list1.Append("中上"); //ListPrint(list1); //list1.Insert("陌生人", 0); //ListPrint(list1); //Console.WriteLine(list1.GetLength); //list1.Insert("傻逼", list1.GetLength-1); //ListPrint(list1); //Console.WriteLine("倒置表:" + list1.ReverseList()); //ListPrint(list1); //Console.WriteLine("表长:{0}", list1.GetLength); //Console.WriteLine("是否是空表:{0}", list1.IsEmpty); //Console.WriteLine("删除的是:{0}", list1.Delete(4)); //Console.WriteLine("表长:{0}", list1.GetLength); //ListPrint(list1); //Console.WriteLine("获取的是:{0}", list1.GetElem(0)); //Console.WriteLine("获取的是:{0}", list1.Locate("傻逼")); //Console.WriteLine("表长:{0}", list1.GetLength); //list1.Delete(list1.GetLength - 2); //list1.SetElem("睡觉了", 0); //ListPrint(list1); //Console.WriteLine("倒置表:" + list1.ReverseList()); //ListPrint(list1); //Console.WriteLine("清空"); //list1.Clear(); //Console.WriteLine("倒置表:" + list1.ReverseList()); //ListPrint(list1); //list1.Append("中上"); //Console.WriteLine("倒置表:" + list1.ReverseList()); //ListPrint(list1); //ListPrint(list1); //Console.ReadKey(); #endregion #region Stack测试 //SeqStack<string> list2 = new SeqStack<string>(4); //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}"); //DataStructPrint(list2); //list2.Clear(); //DataStructPrint(list2); //list2.Push("一"); //list2.Push("二"); //list2.Push("三"); //list2.Push("四"); //list2.Push("五"); //DataStructPrint(list2); //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}"); //Console.WriteLine($"获取:{list2.GetTop()}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"获取:{list2.GetTop()}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"出栈:{list2.Pop()}"); //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}"); //list2.Push("六"); //DataStructPrint(list2); #endregion #region 队列 LinkQueue <string> list = new LinkQueue <string>(); Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}"); DataStructPrint(list); list.EnQueue("一"); list.EnQueue("二"); list.EnQueue("三"); Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}"); list.EnQueue("四"); list.EnQueue("五"); list.EnQueue("六"); DataStructPrint(list); Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}"); Console.WriteLine($"取出:{list.DeQueue()}"); Console.WriteLine($"取出:{list.DeQueue()}"); DataStructPrint(list); Console.WriteLine($"队头:{list.GetHead()}"); list.Clear(); //Console.WriteLine($"取出:{list.DeQueue()}"); //Console.WriteLine($"取出:{list.DeQueue()}"); //Console.WriteLine($"取出:{list.DeQueue()}"); //Console.WriteLine($"取出:{list.DeQueue()}"); DataStructPrint(list); #endregion Console.ReadKey(); }