文章目录

  • 题目:识别结点(node) 故障和边缘(edge)故障中的网络断层扫描
    • 介绍
    • 提示
    • 允许使用的包:
    • 代码如下
      • main.py
      • methods.py
      • suiji_file.gexf
      • test.py

题目:识别结点(node) 故障和边缘(edge)故障中的网络断层扫描

介绍

构造随机连接网络用于网络分析,你可能要考虑: number of nodes (节点的数量), number of edge (边的数量),number of neighbor (邻居的数量), the size of network (网络的大小)可能会影响您的分析。

提示

  1. 你对网络是“盲”的,假设你只能观察到 boundary node (边界节点), 你也许需要一些其他假设。
  2. 找到网络的boundarie (边界), 因为往往将探针/探测器(probe) 从一些边界节点传送到另一些边界节点(boundaries nodes)是最好的办法。
  3. 如何建立网络模型?
    (1)一个延时小的边(edge) , 设1 unit of time (一单位) ; 一条延时大的边(edge), 设9999 units of time (9999单位)
    (2)一个失败的/故障的节点(node) 也许会导致连接到该节点的所有的边(edge) 都
    出现很大的延迟
  4. 你只允许发送探针/探测器(probe) ,一旦接受到探针,就知道探针的路径了。因此,你可能希望在发送探针时使用随机路径,在经过一定数量的观察后,如果没有任何的边缘故障或者节点故障,你应该能够“猜测”网络拓扑。
  5. 考虑最简单的情况,网络中只有一条边 (edge)存在较大的延迟,平均需要发送多少个探针?你可以一直发送探针知道你能识别到边(edge) ; 或者您 可以根据您的观察设置探针数量 (number of probe)的上线,思考您猜测的边(edge) 与实际的边 (edge)有多远?
  6. 自己问问题,从更多的分析(从不同角度)而不是仅仅是我所描述的最简单的情况和解决方法。
  7. 从准确性,复杂性,需要发送的探针数 量或任何你能想到的方面对算法进行基准测试。

允许使用的包:

  • numpy
  • matplotlib
  • pandas
  • sklearn
  • network
  • scipy
  • default packages(比如math, random…)

代码如下

main.py

生成一个固定节点数、连接率为某一值的连通性网络;并且将和网络有关的信息存储至xml文件中。

import random
import networkx as nx
import matplotlib.pylab as pltfrom methods import *print('Number of node in ER rangom network is 30, The probability of connection is 0.2')  # ER随机网络中的节点数为30.连接概率为0.2
NETWORK_SIZE = 30  # 网络节点数为30
p = 0.6  # 连接概率为0.2
boundary = 2  # 小于2默认为边界点
edgewidth = random.uniform(0, 1) * 10  # 生成随机数
edge_widths = []  # 存放权重边的集合
G = nx.erdos_renyi_graph(n=NETWORK_SIZE, p=p)
# 用erdos_renyi_graph(n,p)方法生成一个含有n个节点、以概率p连接的ER随机图
nodes_list = list(G.nodes())  # 转成list便于操作
edges_list = list(G.edges())
for i in range(0, len(edges_list)):# edge_widths.append(edgewidth)edge_widths.append(random.uniform(0, 1) * 10)boundary_node_list = []
ps = nx.spring_layout(G)
print(edges_list[0])  # 输出第一个连通的结点
print("nodes:", G.nodes())
print("edges:", G.edges())
print("edge_widths:", edge_widths)print(len(G.edges))
print(len(edge_widths))# 1
for node in G.nodes():i = 0for edge in [data[0] for data in edges_list]:if node == edge:i = i + 1if i < boundary:boundary_node_list.append(node)
print("boundary_node:", boundary_node_list)# 2
network = [[0] * 30 for i in range(30)]
hang = [data[0] for data in G.edges()]
print(hang)
print(len(hang))
lie = [data[1] for data in G.edges()]
print(lie)
print(len(lie))
i = 0
j = 0
k = 0
for obj in range(len(edge_widths)):temp1 = hang[i]temp2 = lie[j]network[temp1][temp2] = edge_widths[k]i = i + 1j = j + 1k = k + 1print(network)# 4
colors_node = Dijkstra(network, 1, 12)
p = 0
print("colors_node", colors_node)
print("nodes_list",nodes_list)
aaa=['']*30
bbb=['']*len(edges_list)
for i in range(0, len(nodes_list)):# print("p:",p)# print(colors_node[p])if (i == colors_node[p]):if (p < len(colors_node)-1):# print('执行')p = p + 1aaa[i] = 'r'else:aaa[i] = 'y'colors_edge = []
for i in range(0,len(edges_list)):bbb[i]='black'
# nx.draw(G, ps, width=1.0, node_size=10)  # 绘制边的宽度为0.6,节点尺寸为10的网络G图
nx.draw(G,pos=ps,with_labels=True,node_color=aaa,edge_color=bbb)plt.savefig('fig.png', bbox_inches='tight')  # 将图像存为一个png格式的图片文件
plt.show()  # 在窗口中显示这幅图像
nx.write_gexf(G, 'suiji_file.gexf')  # 此图写成.gexf格式

红色结点为探针,连通性与可达性在suiji_file.gexf中可以得出。

methods.py

import os
import sys
import randomdef Dijkstra(network, s, d):  # 迪杰斯特拉算法算s-d的最短路径,并返回该路径和值print("Start Dijstra Path……")path = []  # 用来存储s-d的最短路径n = len(network)  # 邻接矩阵维度,即节点个数fmax = float('inf')w = [[0 for _ in range(n)] for j in range(n)]  # 邻接矩阵转化成维度矩阵,即0→maxbook = [0 for _ in range(n)]  # 是否已经是最小的标记列表dis = [fmax for i in range(n)]  # s到其他节点的最小距离book[s - 1] = 1  # 节点编号从1开始,列表序号从0开始midpath = [-1 for i in range(n)]  # 上一跳列表for i in range(n):for j in range(n):if network[i][j] != 0:w[i][j] = network[i][j]  # 0→maxelse:w[i][j] = fmaxif i == s - 1 and network[i][j] != 0:  # 直连的节点最小距离就是network[i][j]dis[j] = network[i][j]for i in range(n - 1):  # n-1次遍历,除了s节点min = fmaxfor j in range(n):if book[j] == 0 and dis[j] < min:  # 如果未遍历且距离最小min = dis[j]u = jbook[u] = 1for v in range(n):  # u直连的节点遍历一遍if dis[v] > dis[u] + w[u][v]:dis[v] = dis[u] + w[u][v]midpath[v] = u + 1  # 上一跳更新j = d - 1  # j是序号path.append(d)  # 因为存储的是上一跳,所以先加入目的节点d,最后倒置while (midpath[j] != -1):path.append(midpath[j])j = midpath[j] - 1path.append(s)path.reverse()  # 倒置列表print("path:",path)# print(midpath)print("dis:",dis)return path

suiji_file.gexf

生成图片的 .gexf文件如下:

<?xml version='1.0' encoding='utf-8'?>
<gexf xmlns="http://www.gexf.net/1.2draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2"><meta lastmodifieddate="2021-11-06"><creator>NetworkX 2.5</creator></meta><graph defaultedgetype="undirected" mode="static" name=""><nodes><node id="0" label="0" /><node id="1" label="1" /><node id="2" label="2" /><node id="3" label="3" /><node id="4" label="4" /><node id="5" label="5" /><node id="6" label="6" /><node id="7" label="7" /><node id="8" label="8" /><node id="9" label="9" /><node id="10" label="10" /><node id="11" label="11" /><node id="12" label="12" /><node id="13" label="13" /><node id="14" label="14" /><node id="15" label="15" /><node id="16" label="16" /><node id="17" label="17" /><node id="18" label="18" /><node id="19" label="19" /><node id="20" label="20" /><node id="21" label="21" /><node id="22" label="22" /><node id="23" label="23" /><node id="24" label="24" /><node id="25" label="25" /><node id="26" label="26" /><node id="27" label="27" /><node id="28" label="28" /><node id="29" label="29" /></nodes><edges><edge source="0" target="1" id="0" /><edge source="0" target="4" id="1" /><edge source="0" target="5" id="2" /><edge source="0" target="6" id="3" /><edge source="0" target="8" id="4" /><edge source="0" target="10" id="5" /><edge source="0" target="11" id="6" /><edge source="0" target="12" id="7" /><edge source="0" target="14" id="8" /><edge source="0" target="15" id="9" /><edge source="0" target="16" id="10" /><edge source="0" target="18" id="11" /><edge source="0" target="19" id="12" /><edge source="0" target="22" id="13" /><edge source="0" target="23" id="14" /><edge source="0" target="25" id="15" /><edge source="0" target="26" id="16" /><edge source="0" target="28" id="17" /><edge source="0" target="29" id="18" /><edge source="1" target="3" id="19" /><edge source="1" target="7" id="20" /><edge source="1" target="8" id="21" /><edge source="1" target="10" id="22" /><edge source="1" target="12" id="23" /><edge source="1" target="14" id="24" /><edge source="1" target="15" id="25" /><edge source="1" target="16" id="26" /><edge source="1" target="17" id="27" /><edge source="1" target="18" id="28" /><edge source="1" target="20" id="29" /><edge source="1" target="21" id="30" /><edge source="1" target="22" id="31" /><edge source="1" target="23" id="32" /><edge source="1" target="24" id="33" /><edge source="1" target="25" id="34" /><edge source="1" target="26" id="35" /><edge source="1" target="28" id="36" /><edge source="1" target="29" id="37" /><edge source="2" target="5" id="38" /><edge source="2" target="6" id="39" /><edge source="2" target="7" id="40" /><edge source="2" target="8" id="41" /><edge source="2" target="10" id="42" /><edge source="2" target="12" id="43" /><edge source="2" target="13" id="44" /><edge source="2" target="14" id="45" /><edge source="2" target="15" id="46" /><edge source="2" target="16" id="47" /><edge source="2" target="17" id="48" /><edge source="2" target="18" id="49" /><edge source="2" target="20" id="50" /><edge source="2" target="21" id="51" /><edge source="2" target="22" id="52" /><edge source="2" target="24" id="53" /><edge source="2" target="25" id="54" /><edge source="2" target="28" id="55" /><edge source="3" target="5" id="56" /><edge source="3" target="7" id="57" /><edge source="3" target="9" id="58" /><edge source="3" target="10" id="59" /><edge source="3" target="11" id="60" /><edge source="3" target="12" id="61" /><edge source="3" target="13" id="62" /><edge source="3" target="14" id="63" /><edge source="3" target="15" id="64" /><edge source="3" target="16" id="65" /><edge source="3" target="18" id="66" /><edge source="3" target="20" id="67" /><edge source="3" target="22" id="68" /><edge source="3" target="23" id="69" /><edge source="3" target="24" id="70" /><edge source="3" target="27" id="71" /><edge source="4" target="5" id="72" /><edge source="4" target="6" id="73" /><edge source="4" target="7" id="74" /><edge source="4" target="8" id="75" /><edge source="4" target="10" id="76" /><edge source="4" target="12" id="77" /><edge source="4" target="13" id="78" /><edge source="4" target="14" id="79" /><edge source="4" target="16" id="80" /><edge source="4" target="18" id="81" /><edge source="4" target="19" id="82" /><edge source="4" target="20" id="83" /><edge source="4" target="24" id="84" /><edge source="4" target="25" id="85" /><edge source="4" target="27" id="86" /><edge source="4" target="29" id="87" /><edge source="5" target="8" id="88" /><edge source="5" target="9" id="89" /><edge source="5" target="11" id="90" /><edge source="5" target="12" id="91" /><edge source="5" target="13" id="92" /><edge source="5" target="16" id="93" /><edge source="5" target="17" id="94" /><edge source="5" target="18" id="95" /><edge source="5" target="20" id="96" /><edge source="5" target="21" id="97" /><edge source="5" target="22" id="98" /><edge source="5" target="25" id="99" /><edge source="5" target="27" id="100" /><edge source="5" target="28" id="101" /><edge source="5" target="29" id="102" /><edge source="6" target="8" id="103" /><edge source="6" target="10" id="104" /><edge source="6" target="13" id="105" /><edge source="6" target="15" id="106" /><edge source="6" target="16" id="107" /><edge source="6" target="18" id="108" /><edge source="6" target="20" id="109" /><edge source="6" target="21" id="110" /><edge source="6" target="23" id="111" /><edge source="6" target="25" id="112" /><edge source="6" target="27" id="113" /><edge source="6" target="28" id="114" /><edge source="6" target="29" id="115" /><edge source="7" target="9" id="116" /><edge source="7" target="10" id="117" /><edge source="7" target="13" id="118" /><edge source="7" target="14" id="119" /><edge source="7" target="16" id="120" /><edge source="7" target="18" id="121" /><edge source="7" target="19" id="122" /><edge source="7" target="20" id="123" /><edge source="7" target="21" id="124" /><edge source="7" target="22" id="125" /><edge source="7" target="23" id="126" /><edge source="7" target="25" id="127" /><edge source="7" target="26" id="128" /><edge source="7" target="28" id="129" /><edge source="7" target="29" id="130" /><edge source="8" target="9" id="131" /><edge source="8" target="11" id="132" /><edge source="8" target="14" id="133" /><edge source="8" target="15" id="134" /><edge source="8" target="17" id="135" /><edge source="8" target="18" id="136" /><edge source="8" target="19" id="137" /><edge source="8" target="21" id="138" /><edge source="8" target="23" id="139" /><edge source="8" target="24" id="140" /><edge source="8" target="26" id="141" /><edge source="8" target="27" id="142" /><edge source="8" target="29" id="143" /><edge source="9" target="10" id="144" /><edge source="9" target="14" id="145" /><edge source="9" target="16" id="146" /><edge source="9" target="18" id="147" /><edge source="9" target="19" id="148" /><edge source="9" target="21" id="149" /><edge source="9" target="24" id="150" /><edge source="9" target="26" id="151" /><edge source="9" target="27" id="152" /><edge source="9" target="29" id="153" /><edge source="10" target="11" id="154" /><edge source="10" target="15" id="155" /><edge source="10" target="16" id="156" /><edge source="10" target="17" id="157" /><edge source="10" target="18" id="158" /><edge source="10" target="19" id="159" /><edge source="10" target="23" id="160" /><edge source="10" target="24" id="161" /><edge source="10" target="26" id="162" /><edge source="10" target="27" id="163" /><edge source="10" target="28" id="164" /><edge source="11" target="14" id="165" /><edge source="11" target="17" id="166" /><edge source="11" target="20" id="167" /><edge source="11" target="22" id="168" /><edge source="11" target="24" id="169" /><edge source="11" target="26" id="170" /><edge source="12" target="16" id="171" /><edge source="12" target="20" id="172" /><edge source="12" target="24" id="173" /><edge source="12" target="25" id="174" /><edge source="12" target="26" id="175" /><edge source="13" target="15" id="176" /><edge source="13" target="18" id="177" /><edge source="13" target="19" id="178" /><edge source="13" target="20" id="179" /><edge source="13" target="21" id="180" /><edge source="13" target="22" id="181" /><edge source="13" target="23" id="182" /><edge source="13" target="24" id="183" /><edge source="13" target="25" id="184" /><edge source="13" target="26" id="185" /><edge source="13" target="28" id="186" /><edge source="14" target="15" id="187" /><edge source="14" target="17" id="188" /><edge source="14" target="21" id="189" /><edge source="14" target="23" id="190" /><edge source="14" target="24" id="191" /><edge source="14" target="25" id="192" /><edge source="14" target="26" id="193" /><edge source="14" target="27" id="194" /><edge source="14" target="28" id="195" /><edge source="14" target="29" id="196" /><edge source="15" target="16" id="197" /><edge source="15" target="18" id="198" /><edge source="15" target="19" id="199" /><edge source="15" target="20" id="200" /><edge source="15" target="21" id="201" /><edge source="15" target="23" id="202" /><edge source="15" target="26" id="203" /><edge source="15" target="27" id="204" /><edge source="15" target="28" id="205" /><edge source="15" target="29" id="206" /><edge source="16" target="17" id="207" /><edge source="16" target="20" id="208" /><edge source="16" target="22" id="209" /><edge source="16" target="23" id="210" /><edge source="16" target="24" id="211" /><edge source="16" target="25" id="212" /><edge source="16" target="27" id="213" /><edge source="16" target="29" id="214" /><edge source="17" target="19" id="215" /><edge source="17" target="22" id="216" /><edge source="17" target="23" id="217" /><edge source="17" target="26" id="218" /><edge source="17" target="27" id="219" /><edge source="17" target="28" id="220" /><edge source="18" target="20" id="221" /><edge source="18" target="25" id="222" /><edge source="18" target="27" id="223" /><edge source="18" target="28" id="224" /><edge source="18" target="29" id="225" /><edge source="19" target="21" id="226" /><edge source="19" target="22" id="227" /><edge source="19" target="23" id="228" /><edge source="19" target="25" id="229" /><edge source="19" target="27" id="230" /><edge source="19" target="29" id="231" /><edge source="20" target="21" id="232" /><edge source="20" target="22" id="233" /><edge source="20" target="24" id="234" /><edge source="20" target="25" id="235" /><edge source="20" target="27" id="236" /><edge source="20" target="29" id="237" /><edge source="21" target="25" id="238" /><edge source="21" target="26" id="239" /><edge source="22" target="23" id="240" /><edge source="22" target="24" id="241" /><edge source="22" target="26" id="242" /><edge source="22" target="27" id="243" /><edge source="22" target="28" id="244" /><edge source="22" target="29" id="245" /><edge source="23" target="24" id="246" /><edge source="23" target="26" id="247" /><edge source="23" target="29" id="248" /><edge source="24" target="25" id="249" /><edge source="24" target="26" id="250" /><edge source="24" target="27" id="251" /><edge source="24" target="28" id="252" /><edge source="24" target="29" id="253" /><edge source="25" target="26" id="254" /><edge source="25" target="27" id="255" /><edge source="26" target="27" id="256" /><edge source="26" target="28" id="257" /><edge source="28" target="29" id="258" /></edges></graph>
</gexf>

test.py

模拟退火多次迭代寻最优解

import numpy as np
import matplotlib.pyplot as plt
import pdb# coordinates可自行假设
coordinates = np.array([[565.0, 575.0], [25.0, 185.0], [345.0, 750.0], [945.0, 685.0], [845.0, 655.0],[880.0, 660.0], [25.0, 230.0], [525.0, 1000.0], [580.0, 1175.0], [650.0, 1130.0],[1605.0, 620.0], [1220.0, 580.0], [1465.0, 200.0], [1530.0, 5.0], [845.0, 680.0],[725.0, 370.0], [145.0, 665.0], [415.0, 635.0], [510.0, 875.0], [560.0, 365.0],[300.0, 465.0], [520.0, 585.0], [480.0, 415.0], [835.0, 625.0], [975.0, 580.0],[1215.0, 245.0], [1320.0, 315.0], [1250.0, 400.0], [660.0, 180.0], [410.0, 250.0],[420.0, 555.0], [575.0, 665.0], [1150.0, 1160.0], [700.0, 580.0], [685.0, 595.0],[685.0, 610.0], [770.0, 610.0], [795.0, 645.0], [720.0, 635.0], [760.0, 650.0],[475.0, 960.0], [95.0, 260.0], [875.0, 920.0], [700.0, 500.0], [555.0, 815.0],[830.0, 485.0], [1170.0, 65.0], [830.0, 610.0], [605.0, 625.0], [595.0, 360.0],[1340.0, 725.0], [1740.0, 245.0]])def getdistmat(coordinates):num = coordinates.shape[0]distmat = np.zeros((52, 52))for i in range(num):for j in range(i, num):distmat[i][j] = distmat[j][i] = np.linalg.norm(coordinates[i] - coordinates[j])return distmatdef initpara():alpha = 0.99t = (1, 100)markovlen = 1000return alpha, t, markovlennum = coordinates.shape[0]
distmat = getdistmat(coordinates)solutionnew = np.arange(num)
# valuenew = np.max(num)solutioncurrent = solutionnew.copy()
valuecurrent = 99000solutionbest = solutionnew.copy()
valuebest = 99000alpha, t2, markovlen = initpara()
t = t2[1]result = []  # 记录迭代过程中的最优解
while t > t2[0]:for i in np.arange(markovlen):if np.random.rand() > 0.5:while True:loc1 = np.int(np.ceil(np.random.rand() * (num - 1)))loc2 = np.int(np.ceil(np.random.rand() * (num - 1)))if loc1 != loc2:breaksolutionnew[loc1], solutionnew[loc2] = solutionnew[loc2], solutionnew[loc1]else:while True:loc1 = np.int(np.ceil(np.random.rand() * (num - 1)))loc2 = np.int(np.ceil(np.random.rand() * (num - 1)))loc3 = np.int(np.ceil(np.random.rand() * (num - 1)))if ((loc1 != loc2) & (loc2 != loc3) & (loc1 != loc3)):breakif loc1 > loc2:loc1, loc2 = loc2, loc1if loc2 > loc3:loc2, loc3 = loc3, loc2if loc1 > loc2:loc1, loc2 = loc2, loc1tmplist = solutionnew[loc1:loc2].copy()solutionnew[loc1:loc3 - loc2 + 1 + loc1] = solutionnew[loc2:loc3 + 1].copy()solutionnew[loc3 - loc2 + 1 + loc1:loc3 + 1] = tmplist.copy()valuenew = 0for i in range(num - 1):valuenew += distmat[solutionnew[i]][solutionnew[i + 1]]valuenew += distmat[solutionnew[0]][solutionnew[51]]if valuenew < valuecurrent:valuecurrent = valuenewsolutioncurrent = solutionnew.copy()if valuenew < valuebest:valuebest = valuenewsolutionbest = solutionnew.copy()else:if np.random.rand() < np.exp(-(valuenew - valuecurrent) / t):valuecurrent = valuenewsolutioncurrent = solutionnew.copy()else:solutionnew = solutioncurrent.copy()t = alpha * tresult.append(valuebest)print(t)plt.plot(np.array(result))
plt.ylabel("valuebest")
plt.xlabel("t")
plt.show()

【数据结构 课程设计】识别结点(node) 故障和边缘(edge)故障中的网络断层扫描相关推荐

  1. c语言学生管理系统结点,学生管理系统(数据结构课程设计之完整代码)

    <学生管理系统(数据结构课程设计之完整代码)>由会员分享,可在线阅读,更多相关<学生管理系统(数据结构课程设计之完整代码)(14页珍藏版)>请在人人文库网上搜索. 1.数据结构 ...

  2. 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)

    前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...

  3. 数据结构课程设计家谱c语言,数据结构课程设计-家谱的实现与设计.doc

    数据结构课程设计-家谱的实现与设计 课 程 设 计 报 告 课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 朱强 班 级: 13软件 学 号: 20130311227 成 绩: 指 ...

  4. 【广州大学】数据结构课程设计:神秘国度的爱情故事

    数据结构课程设计报告 广州大学 计算机科学与网络工程学院 计算机系 19级网络工程专业网络194班 超级菜狗 (学号:19062000) (班内序号:xxx) 完成时间:2021年1月11日 一.课程 ...

  5. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...

    数据结构课程设计(家族关系查询系统). 1 课程设计介绍 1.1课程设计项目简介 家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化遗产,是 ...

  6. 数据结构 课程设计报告

    <数据结构课程设计> 课程题目 电话客服模拟系统 课程编号 j1620102 学生姓名 严乾聪 学生学号 201311671424 所在专业 信息管理与信息系统 所在班级 信管1134班 ...

  7. 校园导游系统数据结构课程设计(附完整代码)

    1 问题内容与目的要求 1.1 算法产生的背景: Floyd 算法又称为加点法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978 年图灵奖获 ...

  8. c语言 数据结构 课程设计 通讯录制作

    c语言  数据结构  课程设计  源码 infoBook.c #include "dataStruct.h" #include <stdio.h> #include & ...

  9. python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)

    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...

  10. 24速算c语言实训报告ppt,C语言速算24数据结构课程设计.doc

    C语言速算24数据结构课程设计.doc 课程设计论文题 目 名 称 速算 24 课 程 名 称 数据结构课程设计 学 生 姓 名 王浩明 学 号 0941301253 系 .专 业 信息工程系.信息类 ...

最新文章

  1. 在不允许新建对象的条件下,将list中指定条件的值去除
  2. Android日志系统分析之日志设备驱动程序代码阅读
  3. 帮朋友招一个IM开发人员
  4. Blockchain Meeting supporting papers
  5. 小米手机60帧录屏_手机录屏怎样只录手机内部声音不录入外部声音?教你三种方法,一定能帮到你...
  6. object-c 运行时显示view没有设置outlet的错误
  7. Linux多网口绑定配合华为5700 eth-trunk技术,提高网络性能
  8. char类型输出地址
  9. Splay_Tree 模板(区间修改,旋转操作)
  10. Callable 接口控制线程
  11. php 工作管理系统,TP-Admin
  12. AT89S52单片机C语言编程,单片机的C语言应用程序设计_基于AT89S52单片机的篮球计时计分器.doc...
  13. CentOS7安装Oracle 11gR2详细记录整理
  14. 会议审批 查询会议签字
  15. 微信小程序入门使用(一)
  16. Overlay 网络
  17. canvas动画及案例
  18. 云队友丨任正非:没有退路,就是胜利之路
  19. USB启动U盘 计算机找不到,电脑开机快捷启动键找不到u盘怎么办
  20. 【项目管理案例】第十期:如何做好项目采购管理

热门文章

  1. 【记录】读《你在天堂里遇见的五个人》有感
  2. 云栖科技评论第56期:莫忧AI泡沫 相信AI兴邦
  3. Linux 截图保存快捷键
  4. 百度经纬度与高德经纬度互转
  5. 《量子信息与量子计算简明教程》第一章·基本概念(上)
  6. 基于AD5933 生物复阻抗
  7. 向量运算(点积,叉积)
  8. Windows用户远程访问内网共享文件(免费内网穿透)
  9. 南阳 oj 6174问题
  10. 通过wvdial完成4G自动拨号上网