tag:blogger.com,1999:blog-41493898170646665552024-03-05T08:23:58.890-08:00VB LoreVisual basic tips and tricks.Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.comBlogger11125tag:blogger.com,1999:blog-4149389817064666555.post-21137453788091552652009-06-15T12:41:00.000-07:002009-06-15T13:49:12.825-07:00Is Mathematics Important?Does the programming language decide the speed and efficiency of code? Many programmers believe that some languages are more efficient than others, but they are only partly correct. Programmers can sometimes attain more performance from code when they use a lower level language; however, the gained speed is negligible when it is compared to the speed of the algorithm being used. For example, a master assembly programmer could optimize an O(n²) algorithm so that it takes full advantage of every ounce of computer power, but he or she could never outperform an O(n) algorithm written by a new visual basic programmer. The selection of a programming language does not matter for performance as much as the underlying mathematics that a programmer uses.<br /><br /> Mathematics is one of the oldest professions, and it has been maintained and extended by some of the greatest minds in human history. Like many sciences, mathematics gave birth to computer science, and it is used by computer scientist to solve problems and to convey research formally. Mathematics is the beating heart of computer science, and it is the most important language for a programmer to know.<br /><span id="fullpost"><br /> Although programmers can reference highly polished algorithms from books, they can have trouble determining where to use them if they do not have a mathematical background. Mathematics provides the tools that programmers need to measure the efficiency and usefulness of algorithms. Since every algorithm has advantages and disadvantages, it is very important for programmers to select the appropriate algorithm to solve a problem. If programmers select poor algorithms for problems, they will develop slower and less efficient software even though they may be using a lower level language. Programmers need to be able to measure and judge the efficiency of algorithms so that they can write high performance software. <br /><br /> In addition to performance, mathematics eduction teaches programmers essential problem solving skills that are useful for programming. Programmers can translate and use many of the formulas of mathematics in their code. For example, programmers can use graph theory to design special data structures or messaging systems for use in their software. Programmers also learn many mathematical rules that they can apply to aid in solving problems. Programmers with knowledge of mathematics are better programmers because they have essential problem solving skills and access to a large array of algorithms. <br /><br /> Besides the educational benefits, mathematics contains powerful tools that programmers can use to check their algorithms for safety and quality. Programmers can use mathematics to verify the design of their code so that they can have mathematical guarantees for security. Programmers can also use mathematics to rigorously prove their code works so that they do not have surprising errors after they release their software. Since society is becoming more dependent on software, programmers will be under increasing pressure to produce secure and reliable code, and mathematical knowledge is essential for programmers to accomplish writing rigorous code. <br /><br /> In Conclusion, programmers should learn and practice mathematics so that they can write more secure, reliable, and fast applications. Programmers who master mathematics can better test their algorithms for security issues, and they can better test their software for quality. Programmers can also use mathematical analysis on their algorithms so that they can produce faster code. In addition, programmers learn essential problem solving skills from mathematics that they need to solve new problems. Mathematics is the heart of computer science, and programmers need to know it to better their profession.<br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-67959690313676407902009-06-12T22:10:00.000-07:002009-06-14T11:24:59.853-07:00Single Linked List in Visual Basic.NetThe linked list data structure is useful when programmers need to do frequent inserts into a list of information, and it is also useful for data that needs to grow and shrink. Even though it is possible to achieve the same thing in an array, the manipulation on an array would require much more work. For example, if an insert is made in the middle of an array, all of the information below the insert would need to be moved. In a linked list, programmers can insert data into the middle of a list by adjusting two variables. In visual basic, linked lists can be implemented quickly, and programmers can use them to solve many problems.<br /><span id="fullpost"><br />Linked Lists are created out of user defined types called nodes. A node is a class or data structure that is used to store a group of information. For example, a node may contain information about customers like their first names, last names, and social security numbers. In a single linked list, a node will also contain a special variable that points to the next node if one exists. When a new node is created, the last node of the listed will update its special variable to point to the new node. Since only one variable is used in a single linked list, it can only be traveled in one direction from head to tail. The following figure is a diagram of how a single linked list is structured.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4hEkbAsTYGUROJIuxxE37kS4YI6voPpEAT88L6wDW8jMvH04JUy9OG3H43ov-jNAYKqEAEXv9HgpzBWJVrH425706Fyztzy26u1twIgb5Tjf5MK53_cLGCLdFighevd1eKIGenpyOw4o/s1600-h/singlelinkedlist.gif"><img style="cursor: pointer; width: 320px; height: 110px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4hEkbAsTYGUROJIuxxE37kS4YI6voPpEAT88L6wDW8jMvH04JUy9OG3H43ov-jNAYKqEAEXv9HgpzBWJVrH425706Fyztzy26u1twIgb5Tjf5MK53_cLGCLdFighevd1eKIGenpyOw4o/s320/singlelinkedlist.gif" alt="" id="BLOGGER_PHOTO_ID_5346676021524701522" border="0" /></a><br />In visual basic, nodes can be created with classes. The following code is an example of how to create a class node. The node is going to be used to store some example information of a customer.<br /><br /><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;">'Example of a node for use in a link list</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Class</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_FirstName </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'First Name of customer.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_LastName </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Last name of customer.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_SSN </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Social Security Number.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_next </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Pointer to next node</span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">()</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">m_next = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Nothing</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Default to nothing</span></span></span></blockquote><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> FirstName() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String<blockquote></blockquote></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>FirstName = m_FirstName</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> StrName </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">)</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>m_FirstName = StrName</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> LastName() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>LastName = m_LastName</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> strLastName </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">)</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>m_LastName = strLastName</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> SSN() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>SSN = m_SSN</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> strSSN </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">)</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>m_SSN = strSSN</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> NextNode() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>NextNode = m_next</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Get</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNextNode </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode)</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>m_next = clsNextNode</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Set</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Property</span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Class</span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""><br /></span></span></span></p> <p style="margin-bottom: 0in;"><span lang="">Now that the node class is created, lets move on to creating a linked list class. The following code is an example of how to create a single linked list. The example linked list is just going to have simple functionality, and programmers should add more to it in order to better understand linked list data structures. A method to insert a node into a specified position of the list, remove a single node from any position in the list, and the ability to sort the list would be interesting functions for programmers to add.<br /></span></p><p style="margin-bottom: 0in;"><span lang=""><br /></span> </p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Class</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsSingleList</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Member Data</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_Head </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Stores the first node.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_Tail </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Stores the last node<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> m_count </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Long</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Count of nodes</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Funciton New - Default Constructor<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Called when class is initialized.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">()</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">m_count = 0 </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'The list has no nodes.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">m_Head = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Nothing</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Set head and tail to nothing.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">m_Tail = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Nothing</span></span></span></blockquote><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function InsertAtHead<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Clients should call this function to insert<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'a node at the head of the list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: Node to be inserted.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Output: none<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'--------------------------------------------------------------------</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> InsertAtHead(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> vNode </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode)</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'If head is set to data.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Not</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> IsNothing(m_Head) </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Then</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'The new node should be linked to head.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">vNode.NextNode = m_Head</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'set head as new node.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">m_Head = vNode</span></span></p></blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Else</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'First node in the list.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">m_Head = vNode<br />m_Tail = vNode</span></span></blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'update count</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">m_count = m_count + 1</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function InsertAtTail<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Clients should call this function to insert<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'a node at the tail of the list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: Node to be inserted.<br />'Output: none<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'------------------------------------------------------</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> InsertAtTail(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> vNode </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode)</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'if head is set to data<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Not</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> IsNothing(m_Head) </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Then</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Link last tail to new node<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">m_Tail.NextNode = vNode</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Update tail to the new node.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">m_Tail = vNode</span></span></p></blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Else</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Only node in the list.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">m_Head = vNode<br />m_Tail = vNode</span></span></blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'update count</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">m_count = m_count + 1</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function GetNode<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Clients should call this function to retrive<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">' a node in the list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: Position of node in the list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Output: The node in the requested position. If no node<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">' exists, the function will set the clsNode to nothing.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'------------------------------------------------------</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> GetNode(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> index </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Integer</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">) </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> cur </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Temp var used to walk list.<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> i </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Integer</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> = 1 </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Temp Counter</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'If client requested a position in the list that<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'does not exist, set the return node to nothing,<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'and exit funciton.</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> index > m_count </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Then</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">GetNode = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Nothing</span></span></span></blockquote><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Exit</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span></blockquote><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">If</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Start at the top of the list.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">cur = m_Head</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Walk the list until the desired position</span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""> is located.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Do</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">While</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> i <></span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>cur = cur.NextNode</blockquote></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>i = i + 1</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Loop</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Return the node</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">GetNode = cur</span></span></p></blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function: Count<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Clients should call this function to retrive<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'the number of nodes in the linked list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: none<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Output: Number of nodes in list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'------------------------------------------------------</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> Count() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Long</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Return Count<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">Count = m_count</span></span></blockquote><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span><p></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function Empty<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Clients should call this function to remove<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'all nodes in the list.<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: none<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Output: none<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'------------------------------------------------------</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Public</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> Empty()</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><span lang=""></span></span></span></p><blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">m_Tail = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Nothing</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">m_count = 0</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Walk through list to remove all references to<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'node objects. The garbage collector will take<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'care of the actual freeing for us after it sees<br /></span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'no references to the nodes.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">While</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> IsNothing(m_Head) = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">False</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"><blockquote>m_Head = m_Head.NextNode</blockquote></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">While</span></span></span></p></blockquote><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Class</span></span></span></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><span lang="">Finally, the following is an example of how to work with the linked list.</span></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"> <span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> Button1_Click(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> sender </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> System.Object, </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByVal</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> e </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> System.EventArgs) </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Handles</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> Button1.Click</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""></span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> i </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Integer<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> mynode </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> mylist </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsSingleList </span></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Our list</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Create a new node.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Give it some data.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.FirstName = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"John"<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.LastName = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"Jones"<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.SSN = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"555-55-5555"</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Add it to the front of the list.<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">mylist.InsertAtHead(mynode)</span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Create a new node<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode = </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> clsNode</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Give it some data<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.FirstName = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"John"<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.LastName = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"Homes"<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">mynode.SSN = </span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"555-55-5555"</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Add it to the tail of the list<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">mylist.InsertAtTail(mynode)</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Print Count<br /></span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">Debug.Print(mylist.Count)</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Walk list<br /></span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">For</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> i = 1 </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">To</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> mylist.Count</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;"></span></span></p><blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;">mynode = mylist.GetNode(i)</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">Debug.Print(mynode.FirstName)</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">Debug.Print(mynode.LastName)</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">Debug.Print(mynode.SSN)</span></span></p></blockquote><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Next</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">' Empty List</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">mylist.Empty()</span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">Debug.Print(mylist.Count)</span></span></p><p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Sub</span></span></span></p><p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang=""><br /></span></span></span></p> <p style="margin-bottom: 0in;"><span lang="">In conclusion, linked list data structures are easy to create in visual basic. Since linked lists work on generic data, visual basic programmers can reuse their linked list code in many programs. After programmers build up a collection of different data structures, they can use them to solve many complex problems. </span> </p><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com1tag:blogger.com,1999:blog-4149389817064666555.post-23814666053836245612009-06-11T22:29:00.000-07:002009-06-14T11:24:27.187-07:00Is Visual Basic a serious language?On many different programing forums, I have read many different arguments for and against the usefulness of Visual Basic. Some programmers feel that Visual Basic is just a toy language that should be left to children while other programmers feel that visual basic is a serious development tool. Since visual basic started as a simple language, many programmers have a jaded opinion of Visual Basic even though it has grown into a very powerful language. Visual Basic is a serious development environment, and it can be used to solve very complex problems.<br /><span id="fullpost"><br />Software development has grown into a complex process. In the past, one or two programmers could create and maintain world leading software; however, modern day software requires large development teams and interdisciplinary people. As software development increases in complexity, the cost of software development increases as well. Programmers need powerful tools to deal with the ever increasing complexity of software; indeed, they need tools like Visual Basic.<br /><br />While jaded programmers doubt the power of Visual Basic, they understand that software development is rapidly growing in complexity. Visual Basic provides abstractions to help simplify problems, and it provides a fast turn around time for development; therefore, the cost of development in Visual Basic is considerably smaller in comparison to many other languages. Visual Basic also leaves behind the baggage found in many other languages. Memory leaks, runaway pointers, and buffer overflows are not as large of a problem in Visual Basic as they are in other languages because Visual Basic manages details that are error prone. Even though some programmers doubt the power of Visual Basic, they can see some of its advantages.<br /><br />The Visual Basic language allows programmers to use object oriented programming, construct logical statements, and implement important data structures. Object oriented programming is a very powerful feature because it allows programmers to build up libraries of reliable code. Programmers can use object oriented programming to continually add layers to complex problems so that the problems become simplified and easier to work with. In addition to OOP., Visual Basic allows logical statements like shift, and, or, and xor that are fundamental to powerful programming. Programmers can also implement data structures in Visual Basic like link lists, stacks, queues, and trees. Visual Basic has all the important features that are found in other languages while it leaves much of the error prone baggage behind.<br /><br />Although visual basic is a great language, some programmers disagree. Some programmers believe that Visual Basic lacks powerful features, but Visual Basic programmers can implement any data structure that can be implemented in C++. Since Visual Basic allows programmers to solve problems rapidly, some programmers believe that it must effect the software quality; however, it increases the software quality because programmers are working with complex problems through layers of abstractions. Many programmers believe that Visual Basic is too slow to be useful, but it is often as fast as comparable software written in other languages. While languages such as C++ are useful in special areas of programming, Visual Basic adds much to a programmers tool-belt.<br /><br />A small amount of programmers believe that Visual Basic encourages bad programming practices and is used by stupid people, but they are misguided. Visual Basic is a great language for first time programmers, and it has a larger number of new programmers who are learning the basics of programming; however, knowledgeable visual basic programmers follow good programming practices. Like Visual Basic, poor programming practices are prevalent in other languages as well. The battle between security experts and hackers is intense due to wide spread use of poor programming practices in all languages. Hackers have no trouble finding countless exploits in C and C++ applications because of poor programming practices and lazy programmers; also, users have no trouble finding run away pointers and memory leaks. In a basic nutshell, a formal education in computer science and mathematics is what separates good programmers from bad programmers.<br /><br />In conclusion, Visual Basic is a powerful tool in the hands of knowledgeable programmers. Since computer hardware is moving to multiple core processors, software is going to become increasingly difficult to program. Computers are also prevailing in unlikely places such as phones, cars, and other personal gadgets, and they are all interconnected into a vast network called the internet. Programmers need powerful tools that provide abstraction, and Visual Basic is a very powerful tool for programmers to add to their toolbox.<br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com2tag:blogger.com,1999:blog-4149389817064666555.post-57355455588369510642009-06-11T17:52:00.000-07:002009-06-14T11:26:48.764-07:00Generating hash values for strings (VB.net)The .net framework offers many powerful hashing functions that Visual Basic programmers can add in their applications. Hashing values work by assigning numbers to data through a mathematical process. If the data is later changed, the hash value should change as well. Since hashing algorithms are good at identifying modified data, they are very useful in security applications. In fact, many anti-virus applications use hashing algorithms to detect virus files, and hashing is also frequently used in cryptography to detect altered encrypted documents. Thanks to the .net library, Visual Basic programmers can use hashing algorithms with only a few lines of code.<br /><span id="fullpost"><br /><br />For programmers who want to understand how hashing works, I'm going to explain the process of a very weak hashing algorithm. A rudimentary hash function can be created by summing the ASCII (American Standard Code For Information Interchange) values of every byte of data in a string. For example, the character 'A' has an ASCII value of 65, and the character '5' has the ASCII value of 53. The hash value of the string “A5” would be 65+53 = 118. If the string is changed to “A4”, the hash value is changed to 65+52 = 117; therefore, we would be able to detect the modification of our data. <p></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">Note: Individual characters can be displayed in visual basic with the Asc function or obtained in the character map in the start menu. Example: MsgBox(Asc(</span></span></span><span style="color: rgb(163, 21, 21);"><span style="font-size:85%;"><span lang="">"A"</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">))</span></span></span></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"> While our rudimentary hash function works, it has one major problem. What happens if someone changes the string to “K+”? Our hashing function would generate the value 75 + 43 = 118! This problem is referred to as a <b>collision </b><span style="font-weight: normal;">(two different strings that produce the same hash value)</span>, and our simple hashing example has many collisions. Unlike our example, the hash functions provided by the .Net library are mathematically construct to have very few possible collisions. </p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"> The .Net framework provides several different hash functions that visual basic programmers can implement into their applications. Like encryption, Greater bit sizes usually correspond to greater protection. The following is a list of the different hash functions and hash value sizes that are defined in the namespace Security.Cryptography.</p> <p style="margin-bottom: 0in;"><br /></p> <ol><li><p style="margin-bottom: 0in;">SHA-1, Generates 160 bit hash values.</p> </li><li><p style="margin-bottom: 0in;">SHA-256, Generates 256 bit hash values.</p> </li><li><p style="margin-bottom: 0in;">SHA-384, Generates a 384 bit hash value.</p> </li><li><p style="margin-bottom: 0in;">SHA-512, Generates a 512 bit hash value.</p> </li><li><p style="margin-bottom: 0in;">MD5, Generates 128 bit hash values.</p> </li></ol> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">Finally, the following function illustrates how visual basic programmers can use the hash functions provided by the .Net framework. The function accepts string input and outputs the hash value of it.</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"> <span style="font-size:85%;"><span lang="">'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''</span></span></span></p> <p style="margin-bottom: 0in;"> <span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Function GenerateHash</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Purpose: Generate a hash value for string data.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Input: strbuffer, a string varable of text to be hashed.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Output: The hash value in a base64 encoded string.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 128, 0);"> <span style="font-size:85%;"><span lang="">'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''</span></span></span></p> <p style="margin-bottom: 0in;"> <span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Private</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> GenerateHash(</span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">ByRef</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> strbuffer </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang="">) </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">String</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Encoder is used to convert strings into btyes and vise versa</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> myEncoder </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> System.Text.UnicodeEncoding</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'The hash function expects the input to be in bytes.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> myBuffer() </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Byte</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> = myEncoder.GetBytes(strbuffer)</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Here we dimension our MD5 hash function.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Uncomment other algorithms to try them out.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">''''''''''''''''''''''''''''''''''''''''''''''''''''''''''</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Dim</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> myhash </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">As</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">New</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> Security.Cryptography.SHA512Managed</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Dim myHash As New Security.Cryptography.MD5CryptoServiceProvider</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Dim myHash As New Security.Cryptography.SHA1Managed</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Dim myHash As New Security.Cryptography.SHA256Managed</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'Dim myhash As New Security.Cryptography.SHA384Managed</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;" lang=""><br /></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'The following line does a few different things.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'1. It generates a hash value and returns it in bytes.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'2. The encoder is used to convert the bytes into a base</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">' 64 string.</span></span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 128, 0);"><span style="font-size:85%;"><span lang="">'3. The function returns the string value.</span></span></span></p> <p style="margin-bottom: 0in;" lang=""><span style="color: rgb(0, 0, 0);"> <span style="font-size:85%;">GenerateHash = Convert.ToBase64String(myHash.ComputeHash(myBuffer))</span></span></p> <p style="margin-bottom: 0in;"><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">End</span></span></span><span style="color: rgb(0, 0, 0);"><span style="font-size:85%;"><span lang=""> </span></span></span><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><span lang="">Function</span></span></span></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><span lang="">When information needs to be checked for modification, it should be hashed, and the new and old hash values should be compared.</span></p><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-23038158303835702009-06-10T20:53:00.000-07:002009-06-14T11:28:02.019-07:00Optimization: Avoid RedundancyProgrammers are often seeking methods to improve the performance of their code; indeed, code optimization has become a spectator sport amongst programmers. While optimization is a very complex topic, visual basic programmers can write faster code by following a few tips on code redundancy. Since the elimination of code redundancy can greatly improve the performance of software, visual basic programmers should proof read their software for code redundancy during the optimization process.<br /><span id="fullpost"><br />Redundant code inside of loops can be very taxing on software performance. One unnecessary instruction inside of a loop can have a large impact on the performance of software because it is repeated with every iteration of the loop; therefore, programmers should carefully check loops for unnecessary instructions. Visual basic programmers should also avoid accessing the properties of objects inside of a loop; instead, they should cache the needed properties inside of variables. In addition to properties, programmers should avoid function calls inside of loops because function calls are expensive operations. Loops are the most critical part of software, and programmers should pay careful attention to avoid redundant code in them.<br /><br />For example, the following code has an instruction that never changes; as a result, the software will repeat the useless instruction fifty times.<br /><br /><blockquote>for i = 1 to 50<br /><div style="text-align: left;"> x = b ' Stays the same with every loop, get it outside of the loop!<br /> k = j + I<br /> j = j + 1<br /></div>next i</blockquote><br /><br />The above code should be replaced with the following to avoid redundancy.<br /><br /><blockquote>x = b 'Moved outside the loop<br /><br />for i = 1 to 50<br /> k = j + I<br /> j = j + 1<br />next i</blockquote><br /><br />In another example, the following code accesses a property inside of a loop. Every single dot corresponds to one function call.<br /><br /><blockquote>for i = 1 to 50<br /><span><span id="fullpost"> </span></span>text1.text = text1.text + b(i) '100 function calls.<br />next i</blockquote><br /><br />In the above example, two function calls are made with every iteration of the loop. To avoid the function calls, the data can be cached in a variable then assigned to the property after the loop is finished.<br /><blockquote><br />for i = 1 to 50<br /><span><span id="fullpost"> </span></span>strbuffer = strbuffer + b(i) ' No function calls.<br /><span><span id="fullpost"> </span></span>next i<br />text1.text = strbuffer</blockquote><br /><br />Finally, the following example illustrates a redundant function call. Many visual basic programmers use built in functions carelessly inside of loops, but it should be avoided for performance reasons.<br /><br /><blockquote>for i = 1 to 100<br /><span><span id="fullpost"> </span></span> sz = len(string) ' One hundred function calls<br /><span><span id="fullpost"> </span></span> 'Do processing<br />next i</blockquote><br /><br />The above code can be simplified to the following correction.<br /><blockquote><br />sz = len(string) ' One function call<br />for i = 1 to 100<br /><span><span id="fullpost"> </span></span> 'Do Processing with sz<br />next i</blockquote><br /><br />Programmers should always search for unnecessary calculations and poorly designed decision nests in their code. Unnecessary calculations are a frequent problem in code because many programmers are not mathematically strong. Many programmers include additional instructions to acquire a result that can be obtained with fewer calculations. Aside from calculations, programmers should be careful when they design decision nests in code. The conditional branch that is most likely to be true should be placed the highest in a decision nest, and the conditional branch that is most likely to be false should be placed the lowest in the nest. If programmers pay careful attention, they can avoid unnecessary calculations and design better decision branches.<br /><br />In the following example, the calculations being made are redundant because parts of the calculation can be shared. The variables a and b are multiplied twice.<br /><br /><blockquote>x = a * b + c<br />y = a * b + d</blockquote><br /><br />To avoid redundancy, programmers can simply share parts of the calculations.<br /><br /><blockquote>t = a * b<br />x = t + c<br />y = t + d</blockquote><br /><br />Programmers should avoid redundant memory allocation as much as possible. Memory allocation is a very expensive process to perform in code, and it is frequently a topic in optimization. Like hard drives, frequent memory allocation and freeing of small data may cause memory fragmentation. After computer memory becomes fragmented, computer performance is severely effected because the memory manger must find appropriate memory locations that are large enough to store data. When programmers need to allocate memory, they should attempt to allocate enough memory to avoid the need for reallocation.<br /><br />In conclusion, visual basic programmers can speed up their applications by reducing code redundancy. Code redundancy is a common occurrence in visual basic programs, and it can be avoided with careful attention to detail.<br /><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-10353198738110391632009-06-10T10:07:00.000-07:002009-06-14T11:27:51.885-07:00Introduction to OptimizationIn the modern world, people want software to perform labyrinthine tasks quickly. If people are forced to wait for software, they become frustrated, and they may seek alternative software to use. While great expansions have been made in hardware, the glory days of moore's law is almost over, and the burden of providing performance is increasingly being shifted onto programmers. As programmers do code optimization more frequently, they need to learn a few basic rules. Even though code optimization can increase the speed of a program, programmers should use optimization with great care, and they should always maintain clarity in code.<br /><span id="fullpost"><br />In many situations, code optimization can often be avoided by using good programming practices. Writing code is much like writing arguments or essays, and good programmers will often write an outline of the software program before they sit down to code it. Outlines allow programmers to focus on the clarity of the software without having to worry as much about details. After an outline is created, programmers should evaluate individual functions for algorithm selection. Since algorithms have strengths and weaknesses, programmers should select the right one for the task at hand. Like in English, programmers should also proof read for errors and redundancy. Good programming practices can reduce development time and provide better quality software, and they can also lead to more responsive software.<br /><br />Many programmers often waste time optimizing irrelevant code. Optimizing every single line of a program is poor programing practice and a complete waste of time. When a program has speed problems, it should be profiled to identify areas in code that are causing the latency. Loops and complex calculating instructions should be the targeted areas during the optimization process. When an algorithm is identified as being the cause of performance loss, the algorithm should be evaluated by big-O notation before optimization is considered. If an algorithm has a poor big-o, it would be a waste of time to optimize the algorithm. Programmers must be able to identify areas in code that cause performance problems so that they do not waste time optimizing useless code.<br /><br />Optimized code can be very difficult to maintain. Documentation is very important when code is being optimized because optimized code can be cryptic to read. Since optimized code is so complex, programmers should always provide the algorithm being used before optimization in their documentation. Aside from providing the unoptimized algorithm, programmers should detail every step of the optimization process so that they can understand the algorithm at a later date. Documentation is a critical part of the optimization process, and good programmers will always document optimized code rigorously.<br /><br />In conclusion, programmers must follow good programming practices as they become increasingly responsible for performance gains in the computer industry. Programmers should always follow the software development cycle and proof read their code. During the coding process, programmers should rigorously document optimized code to avoid errors and maintenance nightmares.<br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-5243013655594891012009-06-10T07:52:00.000-07:002009-06-14T11:26:09.975-07:00Passing Visual Basic Arrays to Assembly DLL ModulesProgrammers can learn much about the innards of visual basic by doing some assembly language programming. Assembly language reveals the underlying computer architecture, and it harbors all of the secrets many programmers seek. Outside of educational value, Programmers can also write assembly modules that can be called from visual basic applications.<br /><br />While a complete introduction to assembly language is beyond the scope of this article, programmers who know some of the x86 assembly language should have no trouble creating assembly DLL files for use in visual basic. The process of creating an assembly DLL file is the same as creating a DLL file in C++, and the calling convention is still standard call; however, programmers need to know some information about variable sizes and structure before they can create assembly DLL files for visual basic.<br /><span id="fullpost"><br />The following information is how variables correspond between visual basic and assembly language. This list is not complete, but other variables can be looked up on MSDN.<br /><br />Visual basic – Assembly<br />byte – BYTE<br />Char – BYTE<br />boolean – WORD<br />Integer – WORD<br />Long – DWORD<br />Short – DWORD<br />String – DWORD Variable is passed by pointer.<br /><br />While variables correspond quite harmoniously between visual basic and assembly, arrays are a different story. Visual basic does not store arrays in a straight forward manner; instead, visual basic stores arrays in an OLE_SAFEARRAY structure. When programmers wish to pass arrays to assembly language DLL files, they must work with the structure of the array.<br /><br /><br />SAFEARRAYBOUND struct<br />cElements DWORD ? ;Number of Elements<br />lLbound DWORD ? ; Lower Boundary<br />SAFEARRAYBOUND ends<br /><br />OLE_SAFEARRAY struct<br />cDims WORD ? ; Number of dimensions<br />fFeatures WORD ? ; Bitfield indicating attributes<br />cbElements DWORD ? ; size of an element of the array<br />cLocks DWORD ? ; lock counter 0=Locked<br />pvData DWORD ? ; Pointer to data<br />rgsabound SAFEARRAYBOUND <> ; Contains info for dimensions<br />OLE_SAFEARRAY ends<br /><br />Finally, here the following is an example of how to reference the structure from MASM32.<br /><br />testfunction proc myArray:DWORD<br />mov eax, myArray<br />mov edx, [eax] ;EDX now has our safearray.<br /><br />'Assign 1st value to eax.<br />mov eax, (OLE_SAFEARRAY ptr [edx]).pvData<br />ret<br />testfunction endp<br /><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-74115199450601726362009-06-10T07:35:00.000-07:002009-06-14T11:25:50.789-07:00How to avoid auto string conversions in Visual BasicWhen visual basic programs call outside sources like C++ DLL files, visual basic automatically converts Unicode strings into ASCII strings. After the outside function completes its task, visual basic will convert the ASCII string back into Unicode format. Sometimes the auto conversion done by visual basic can be a problem because programmers may want to keep the string in Unicode format. In order to get around the conversion, programmers should use byte arrays instead of strings.<br /><br />bytearray() = mystring<br /><br />The above tip can be very useful when programmers need to keep the string in Unicode format. Some windows API functions require Unicode strings to be passed in order for them to work. Hopefully Microsoft will eventually add an extra feature to allow programers to decide on the conversion process without a hack.Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-24993525586230334342009-06-10T07:26:00.000-07:002009-06-14T11:25:38.503-07:00Calling C++ DLL files from Visual BasicSince visual basic hides many details, programmers are limited on control. In general, programmers benefit from fewer details because they save on development time; however, some tasks are difficult or impossible to do without having access to more details then what visual basic provides. In this article, I'm going to illustrate how programmers can interface a C++ DLL with Visual Basic so that programmers can use C++ to solve specific problems with a visual basic program.<br /><span id="fullpost"><br />I am going to make the assumption that programmers know how to program in C++ and that they are using the Visual C++ compiler. Other compilers should still work, but programmers may have to check documentation for creating window DLL projects. Programmers who don't know C++ will not benefit from this article because they must learn the C++ language first, and teaching C++ in one article is impossible.<br /><br />Step 1: Open Visual C++<br />a. Create a win32 Dynamic Link Library project with a meaningful name.<br />b. Add a source file and name it main.cpp<br />c. Add a header file and name it main.h<br />d. Add a text file and give it the same name as the project with the extension .def (Example: myproject.def)<br /><br />Step 2. Add a reference to ws2_32.lib<br />a. In the main menu, select project and then settings.<br />b. Click on the link tab.<br />c. In the object and library modules, add ws2_32.lib<br />d. Hit ok.<br /><br />The ws2.32.lib library is required for our project because it is used when working with visual basic strings.<br /><br />Step 3. Include the following code in main.h <table bordercolordark="#000000" bordercolorlight="#000000" width="100%" bgcolor="#cccccc" border="1" bordercolor="#000000" cellpadding="1" cellspacing="1"><br /><tbody><tr><br /> <td><br />#include <cstring> // This is used for strlen()<br /><br />// use __stdcall or visual basic will not be able to pass parameters to the function:<br />void __stdcall xorString(char * text, const char * key);<br /></cstring></td><br /></tr><br /></tbody></table><br />The xorString function is the export function that we are going to call from visual basic. The function is going to accept a message string and a key string from visual basic. The output of the function is going to be a childishly simple encrypted message. Programmers should NEVER rely on the xor algorithm for securing information because it can be broken very quickly. In this article, the xor algorithm is being used for an example only.<br /><br />Step 4. Include the following code in main.cpp<br /><table bordercolordark="#000000" bordercolorlight="#000000" width="100%" bgcolor="#cccccc" border="1" bordercolor="#000000" cellpadding="1" cellspacing="1"><br /><tbody><tr><br /> <td><br />#include "main.h"<br /><br />using namespace std;<br /><br />// Again, you have to use __stdcall or visual basic can’t pass parameters<br />void __stdcall xorString(char * text, const char * key)<br />{<br />// This function takes text and xors it with a key.<br />// xor is a silly cipher on its own but can be useful<br />// when used with strong ciphers such as AES.<br /><br />int textSize;<br />int keySize;<br /><br />textSize = strlen(text);<br />keySize = strlen(key);<br /><br />for (int i = 0; i <><br /></td></tr><br /></tbody></table><br />Step 5. Include the export function in the definition file. The following should be included in the text file we changed into a .def file in step 1.<br /><table bordercolordark="#000000" bordercolorlight="#000000" width="100%" bgcolor="#cccccc" border="1" bordercolor="#000000" cellpadding="1" cellspacing="1"><br /><tbody><tr><br /> <td><br />LIBRARY "projectnamehere.dll" ;The quotes are suppose to be there.<br />EXPORTS ;List functions to export below this line.<br />xorString ; The function we wish to call from visual basic.<br /></td><br /></tr><br /></tbody></table><br />Step 6. Save and build the DLL file.<br /><br />After the DLL file is built by the compiler, it will need to be located on the hard drive. The file should be in the project folder under debug or release. After the DLL file is found, it should be moved to another location so that it will be easier to remember. I would personally recommend C:\. Next, we will call the DLL file from visual basic.<br /><br />Step 1. Open visual basic.<br />a. Select windows application from the project menu.<br />b. On the form, add a command button named Command1.<br />c. On the form, add a text control named Text1<br /><br />Step 2. In code view, paste the following declaration at the top of the file.<br /><table bordercolordark="#000000" bordercolorlight="#000000" width="100%" bgcolor="#cccccc" border="1" bordercolor="#000000" cellpadding="1" cellspacing="1"><br /><tbody><tr><br /> <td><br />Private Declare Function xorString Lib "c:\DLLFILENAMEHERE.dll" (ByVal text As String, ByVal key As String) As Long<br /></td><br /></tr><br /></tbody></table><br />The above code is our function declaration, and it tells visual basic where to find our DLL file, the name of the function, parameters the function expects, and the return type of the function.<br /><br />Step 3.<br />Add the following code to the module.<br /><table bordercolordark="#000000" bordercolorlight="#000000" width="100%" bgcolor="#cccccc" border="1" bordercolor="#000000" cellpadding="1" cellspacing="1"><br /><tbody><tr><br /> <td><br />Private Sub Command1_Click()<br />Dim str As String<br />Dim key As String<br /><br />str = Text1.text ' Get Text<br />key = "blah" ' Set key<br /><br />xorString str, key ' Call Dll to xor text =)<br /><br />Text1.text = str ' Show Text<br />End Sub<br /></td><br /></tr><br /></tbody></table><br />After the above code has been added, the project can be executed. Simply type some text into the text box and click the command button. The text should change to weird looking characters. After clicking the command button a 2nd time, the text should change back to normal.<br /><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-39987303316472624502009-06-09T16:35:00.000-07:002009-06-14T11:26:36.912-07:00Using Powerful Encryption in Visual BasicFrom time to time, visual basic programmers need the ability to secure information. When security is needed in software, many visual basic programmers create childishly simple algorithms that can be easily broken; however, programmers have another option to secure information. Visual basic programmers can add powerful encryption to their programs when they plug their software into the CAPICOM library that is provided in the platform SDK by Microsoft.<br /><span id="fullpost"><br />Programmers must install the platform software development kit from the Microsoft web site before they can use CAPICOM library. Since Microsoft frequently changes its URLs, programmers should just do a search for platform SDK on the Microsoft web site. Since the platform SDK comes with an easy to use setup, vb programmers should have no trouble installing the kit.<br /><br />After the platform software development kit has been installed, programmers can simply plug the library into their software. In visual basic, programmers should go to the menu and select project->references and select the COM tab. In the list of components, programmers should select “CAPICOM Type Library” and hit ok; now, programmers should be able to call CAPICOM functions from their software project.<br /><br />After the CAPICOM library has been incorporated into the software project, programmers can encrypt and decrypt information with ease. For example, programmers can experiment with the following code.<br /><br />Test Form Setup:<br />Programmers should add two text boxes and two command buttons to a standard form. The first text box should be large because it is going to hold the message.<br /><br />Text Box 1. Name=txtMessage, text=nothing, Multiline=true<br />Text Box 2. Name=txtPassword, text=nothing, passwordchar=*<br />Command Button 1. Name=cmdDecrypt, text = Decrypt<br />Command Button 2. Name = cmdEncrypt, text = Encrypt<br /><br />After programmers have added the above components to their form, they can paste the following code into the form's module.<br /><br /><table width="100%" bgcolor="#cccccc" border="0"><br /><tbody><tr><br /> <td><br />Private Sub cmdDecrypt_Click()<br /> 'Make sure we have entered all the information:<br /> If txtMessage.Text <> "" And txtPassword <> "" Then<br /> <br /> 'This is our encryption object<br /> Dim DecryptData As New EncryptedData<br /> <br /> 'We send the object the password to use to unlock the encryption:<br /> DecryptData.SetSecret (txtPassword.Text)<br /> <br /> 'Send the ciphertext to the object and tell it to decrypt it.<br /> DecryptData.Decrypt (txtMessage.Text)<br /> <br /> 'Get our plaintext from the object<br /> txtMessage.Text = DecryptData.Content<br /> End If<br />End Sub<br /><br />Private Sub cmdEncrypt_Click()<br /> 'Make sure we have entered all the information:<br /> If txtMessage.Text <> "" And txtPassword <> "" Then<br /><br /> 'This is our encryption object<br /> Dim encryptdata As New EncryptedData<br /><br /> 'Before we can start encrypting, we got to define the<br /> 'algorithm, keysize, and the password (Used to generate key)<br /> '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br /> 'Algorithm to use: AES (Advanced Encryption Standard)<br /> encryptdata.Algorithm = CAPICOM_ENCRYPTION_ALGORITHM_AES<br /> <br /> 'You could also use:<br /> '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br /> 'encryptdata.Algorithm =CAPICOM_ENCRYPTION_ALGORITHM_3DES<br /> 'encryptdata.Algorithm = CAPICOM_ENCRYPTION_ALGORITHM_DES<br /> 'encryptdata.algorithm = CAPICOM_ENCRYPTION_ALGORITHM_RC2<br /> 'encryptdata.Algorithm = CAPICOM_ENCRYPTION_ALGORITHM_RC4<br /> <br /> 'Next we set our key size, which is a no brainer to put to max.<br /> encryptdata.Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM<br /> <br /> 'Next we set our secret password to unlock the message.<br /> '''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br /> encryptdata.SetSecret (txtPassword.Text)<br /> <br /> 'We send the object the plaintext scramble:<br /> encryptdata.Content = txtMessage.Text<br /> <br /> 'Return message as base64<br /> txtMessage.Text = encryptdata.Encrypt(CAPICOM_ENCODE_BASE64)<br /> End If<br />End Sub<br /></td><br /></tr><br /></tbody></table><br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0tag:blogger.com,1999:blog-4149389817064666555.post-67761530705298259262009-06-09T16:27:00.000-07:002009-06-14T11:24:06.039-07:00Document EverythingEven though a programmer may write good code, the software may be of poor quality because the programmer failed to document the code clearly. A program of complexity will often have several programmers working to develop and maintain it, but poor documentation can make software projects hard or impossible to maintain. Programmers should always document their code well so that the software will be easier to maintain and extend.<br /><span id="fullpost"><br />Programmers should properly name all variables, functions, and class objects used in code. Variable names should be named according to their purpose so that the purpose of the variables will be obvious and clear throughout their lifetime. Programmers should generally avoid variable names like x, y, and z. Like variables, functions should also be named according to their purpose, and they should have clear in and out parameters. In addition, classes should be named according to their purpose or relationship. By using proper naming of variables, classes, and functions, programmers will create easier to read code.<br /><br />Besides names, programmers should always comment the purpose of every function. Every single function in code should be commented to illustrate the intended purpose of the function in a complete sentence. For example, “// Function HexToDec – takes a hexadecimal number as input and outputs the number in decimal.” Function parameters should also be documented to clearly express expected input and output. Processes inside of the function should also be documented to describe how the function obtains its results. Since some functions can be very complex, it is very important to illustrate the process being used by the function. Properly documenting functions can lead to higher quality software and easier maintenance.<br /><br />Like functions, programmers should comment every class. Class member data should be clearly named so that other programmers can better understand its usage in the class. Class constructors, deconstructions, overloading operators, and member functions should be well defined and commented to illustrate their purpose. Every class should be commented to illustrate the intended purpose of the class, and it should contain any necessary information for clients so that they can quickly implement the class. Since object oriented programming can lead to code reuse, documentation in classes are essential.<br /><br />In conclusion, programmers should pay particular attention to the documentation of their software project so that they can maintain clarity throughout their code. When programmers fail to properly document their code, the resulting software is often of poor quality. Even though many people believe programming is only about writing code, writing documentation is also a very important part of the process of software development.<br /></span>Mavenhttp://www.blogger.com/profile/15094417282848946818noreply@blogger.com0