|
A LinkedList[^] does not have a sort functionality. Are you sure you don't use a normal ArrayList[^], or better, a List<T>[^].
If yes, then this link[^] is for you.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
this is the linklist class i created
class LinkedList
{
private Node head, tail;
private int size;
public LinkedList()
{
head = null;
size = 0;
}
public Node Tail
{
get { return tail; }
}
public Node Head
{
get { return head; }
}
public int Size
{
get { return size; }
}
public void AddFront(object data)
{
Node newNode = new Node(data, head);
if (head == null)
tail = newNode;
head = newNode;
size++;
}
public void AddRear(object data)
{
Node newNode = new Node(data, null);
if (head == null)
{
head = newNode;
tail = newNode;
size++;
}
else
{
tail.Link = newNode;
tail = newNode;
size++;
}
}
public bool DeleteFront()
{
if (head == null)
return false;
else
{
head = head.Link;
size--;
return true;
}
}
And this is my Node class
using System;
namespace GameCharacterTrackingSystem
{
public class Node
{
object data;
Node link;
public Node(object d, Node l)
{
data = d;
link = l;
}
public object Data
{
get
{
return data;
}
set
{
data = value;
}
}
public Node Link
{
get
{
return link;
}
set
{
link = value;
}
}
}
}
This is my Entity class which will create the object to be store in my linklist
using System;
using System.Collections.Generic;
using System.Text;
namespace GameCharacterTrackingSystem
{
class Entity
{
private string type;
private string name;
private int level;
public Entity()
{
type = null;
name = null;
level = 0;
}
public Entity(string type, string name, int level)
{
this.type = type;
this.name = name;
this.level = level;
}
public string Type
{
get { return type; }
set { type = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Level
{
get { return level; }
set { level = value; }
}
public override string ToString()
{
return "Type : " + type + ", Name : " + name + ", Level : " + level;
}
}
}
Inside LinkList.cs i want to add another method to sort the stored Entity by level, name and type.. how should the method be write?
|
|
|
|
|
OK - if you wrote a linkedlist class, I guess this is homework ( you should never use your own container classes ). The easy way to do a sort, is to go through the list, and compare each pair of items, and swap them if they are in the wrong order. You need to do this n*n times, it's called a bubble sort. Another way to do it is to take each item and move it towards the front of the list until it's in the right place. This will be quicker.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
You can sort a linked list efficiently with a mergesort, Google for a solution.
|
|
|
|
|
i google and found the following code
int[] mergeSort (int[] data) {
if (data.Length == 1)
return data;
int middle = data.Length / 2;
int[] left = mergeSort(subArray(data, 0, middle - 1));
int[] right = mergeSort(subArray(data, middle, data.Length - 1));
int[] result = new int[data.Length];
int dPtr = 0;
int lPtr = 0;
int rPtr = 0;
while (dPtr < data.Length) {
if (lPtr == left.Length) {
result[dPtr] = right[rPtr];
rPtr++;
} else if (rPtr == right.Length) {
result[dPtr] = left[lPtr];
lPtr++;
} else if (left[lPtr] < right[rPtr]) {
result[dPtr] = left[lPtr];
lPtr++;
} else {
result[dPtr] = right[rPtr];
rPtr++;
}
dPtr++;
}
return result;
}
The example takes in an integer, base on my code what should i take in? and if i wanan sort by name, how does the algorithm goes?
|
|
|
|
|
benjamin yap wrote:
The example takes in an integer, base on my code what should i take in? and if i wanan sort by name, how does the algorithm goes?
It doesn't make much sense to take a complete code and adjust it without knowing the algorithm that the basis of this algorithm. You should either take the time to understand how a merge sort (or any kind of sort algorithm) works, or otherwise you should really implement the most basic of all sorting algorithms, the bubble sort Christian mentioned.
modified 12-Sep-18 21:01pm.
|
|
|
|
|
It takes an int because it will sort the list from smallest to largest (or largest to smallest, i didn't actually look).
Your going to need to modify it for strings (if you want to do it by name). string.Compare(string, string) returns an int, less than zero means the first string is less than the second, 0 is equal, and greater than is larger.
So, string.Compare("cheesy", "bacon"); would return a number greater than 0 because 'c' comes after 'b' in the alphabet. I'm not sure if upper case letters make a difference so thats something you should check.
My current favourite word is: I'm starting to run out of fav. words!
-SK Genius
Game Programming articles start - here[ ^]-
|
|
|
|
|
benjamin yap wrote: int[] mergeSort (int[] data)
Sorry, but that is for an array, not a linked list. Try again.
|
|
|
|
|
So its
public LinkList MergeSort(LinkList data)
?
modified on Tuesday, June 24, 2008 12:44 AM
|
|
|
|
|
benjamin yap wrote: public LinkList MergeSort(LinkList data)
Yes, it should look like that in the end. The code you pasted is for an int array. You could probably adjust that code to handle a generic linked list (an exercise for you, not me).
You could also just see what wikipedia say about the mergesort algorithm, and write your own from scratch. From what you can see, it is pretty simple.
|
|
|
|
|
I realli cannot figure out. i tried this any keep getting error
Original Sample
public static void qsort(char[] items) {
qs(items, 0, items.Length-1);
}
static void qs(char[] items, int left, int right)
{
int i, j;
char x, y;
i = left; j = right;
x = items[(left+right)/2];
do {
while((items[i] < x) && (i < right)) i++;
while((x < items[j]) && (j > left)) j--;
if(i <= j) {
y = items[i];
items[i] = items[j];
items[j] = y;
i++; j--;
}
} while(i <= j);
if(left < j) qs(items, left, j);
if(i < right) qs(items, i, right);
}
}
My code
public void qsort(LinkList list)
{
qs(list, 0, list.size - 1);
}
public void qs(LinkList list, int left, int right)
{
int i, j;
LinkList
i = left; j = right;
x = list[(left+right)/2];
do
{
while((list[i] < x) && (i < right)) i++;
while((x < list[j]) && (j > left)) j--;
if(i <= j)
{
y = list[i];
list[i] = list[j];
list[j] = y;
i++; j--;
}
} while(i <= j);
if(left < j) qs(list, left, j);
if(i < right) qs(list, i, right);
}
I realli dont know what to change...because their example is using a char array. but for my case, i am using an object Entity which have 3 attributes
|
|
|
|
|
Hi, i have created my GUI for a inventory system.
I want to store the data entered in the form to database or xml or flatfile.
which is recommended?
my design of the program is using MDIform.. how should i store the connection string or etc etc?
|
|
|
|
|
benjamin yap wrote: which is recommended?
For an inventory ? A real SQL database, for sure. Unlikely for that to be small enough to be using XML or some other flat file
benjamin yap wrote: how should i store the connection string or etc etc?
in the app config
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
what do you mean app config? how can i find that? or do i have to create my self
|
|
|
|
|
your project has a file called app.config in it. It gets turned into *yourappname*.exe.config at compile time. You put settings stuff in there.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
i cant find it.
at the solution explorer it have
Solution "windowsapplication4" (1 project)
- WindowsApplication4
- - Properties
- - Reference
- - Form1.cs
- - Program.cs
- - Settings.cs
|
|
|
|
|
Well, you can add one if you don't see it. I always see them in my projects, tho.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Issit
Name | Type | Scope | Value
setting string User
so i just change the string to (connection String) and set the value there?
how does the value look like?
Issit when i compile, i don have to declare the connection string again?
|
|
|
|
|
http://www.ajaxline.com/node/258[^]
I recommend reading the article I link to in my sig.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
I suggest doing some reading. Yes, the point of a config file is that you store values which can be changed by the end user, but you don't need to enter them again.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Add new item to your project. Select Application Configuration File. It is not added automatically in VS2003.
|
|
|
|
|
i am using Microsot Visual Studio 2005
When i select add new Item, i have SQL Database file and Settings File.
I selected settings file
|
|
|
|
|
Well, is the project Windows Application project?
It should be Application Configuration or something similar (don't have VS now).
|
|
|
|
|
Hello all,
I'm trying to change an attribute in an XML document based on some criteria,
I'm using C#, For example I need to do a "search" based on a person's user id,
the user id is an attribute of a node name student.
if the userid matches a text box I then need to change the Grade attribute of the student.
for example, my xml document looks like this
<!--List of students. -->
<Students>
<Student userID="567" Registration="Reg268" Grade="A" Subject="Math"/>
<Student userID="345" Registration="Reg951" Grade="B" Subject="Science"/>
<Student userID="475" Registration="Reg195" Grade="B" Subject="Science"/>
</Students>
I want to 'search' for student 345 and then change the Grade to an 'A'
Any help would be greatly appreciated.
JC
|
|
|
|
|
You can select a node in an XmlDocument using Xpath and then use the Attributes collection to access/change an attribute.
Christian Graus
Please read this if you don't understand the answer I've given you
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|