C版的链表先要了解动态内存分配函数malloc的使用,使用结构表示节点单元。
代码如下:
C#使用类代替结构进行节点表示,改写如下:
不过这个版本(包括C和C#代码)的链表创建有一些问题,你看出来了吗?
本来应该分配6个节点,可上面的代码却分配了7个节点,产生这种错误的原因是因为没有独立处理第一个节点。链表中的第一个节点是链表操作的特例,需要独立处理。
改改以后的代码如下:
C版本 :
C#版本:
参考资料:《数据结构C语言版》
wssmax的blog文章:c#数据结构研究———链表1
PS:我不是很清楚.NET中写数据结构的方式,以上C#代码只是纯粹按部就班改写C代码,如果有更好的方式,欢迎大家提醒,谢谢!
代码如下:
1
#include<stdio.h>
2![]()
3
struct llist
4
{
5
int num;
6
char name[10];
7
struct llist *next;
8
};
9
typedef struct llist node;
10
typedef node *llink;
11![]()
12
void main()
13
{
14
llink head;
15
llink ptr;
16
int i;
17
18
head = (llink)malloc(sizeof(node));
19
if(!head)
20
{
21
printf("内存分配失败!\n");
22
exit(1);
23
}
24
25
head->next = NULL;
26
ptr = head;
27
printf("请输入六项邮寄数据:\n");
28
for(i = 0;i < 6; i++)
29
{
30
printf("请输入编号 ==> ");
31
scanf("%d",&ptr->num);
32
printf("请输入编号(%d)的姓名 ==> ",ptr->num);
33
scanf("%s",ptr->name);
34
ptr->next = (llink)malloc(sizeof(node));
35
if(!ptr->next)
36
{
37
printf("内存分配失败!\n");
38
exit(1);
39
}
40
ptr->next->next = NULL;
41
ptr = ptr->next;
42
}
43
printf("邮寄数据:\n");
44
ptr = head;
45
for(i = 0;i < 6;i++)
46
{
47
printf("编号:%d\n",ptr->num);
48
printf(" 姓名 : %s\n",ptr->name);
49
ptr = ptr->next;
50
}
51
}
#include<stdio.h>2

3
struct llist4
{5
int num;6
char name[10];7
struct llist *next;8
};9
typedef struct llist node;10
typedef node *llink;11

12
void main()13
{14
llink head;15
llink ptr;16
int i;17
18
head = (llink)malloc(sizeof(node));19
if(!head)20
{21
printf("内存分配失败!\n");22
exit(1);23
}24
25
head->next = NULL;26
ptr = head;27
printf("请输入六项邮寄数据:\n");28
for(i = 0;i < 6; i++)29
{30
printf("请输入编号 ==> ");31
scanf("%d",&ptr->num);32
printf("请输入编号(%d)的姓名 ==> ",ptr->num);33
scanf("%s",ptr->name);34
ptr->next = (llink)malloc(sizeof(node));35
if(!ptr->next)36
{37
printf("内存分配失败!\n");38
exit(1);39
}40
ptr->next->next = NULL;41
ptr = ptr->next;42
}43
printf("邮寄数据:\n");44
ptr = head;45
for(i = 0;i < 6;i++)46
{47
printf("编号:%d\n",ptr->num);48
printf(" 姓名 : %s\n",ptr->name);49
ptr = ptr->next;50
}51
}C#使用类代替结构进行节点表示,改写如下:
1
using System;
2![]()
3
class Node
4
{
5
private int num;
6
7
public int Num
8
{
9
set{num = value;}
10
get{return num;}
11
}
12
13
private string name;
14
15
public string Name
16
{
17
set{name = value;}
18
get{return name;}
19
}
20
21
private Node next;
22
23
public Node Next
24
{
25
set{next = value;}
26
get{return next;}
27
}
28
}
29![]()
30
class Test
31
{
32
public static void Main()
33
{
34
Node head;
35
Node tempNode;
36
int i;
37
38
head = new Node();
39
head.Next = null;
40
tempNode = head;
41
Console.WriteLine("请输入六项邮寄数据:");
42
for( i = 0 ;i < 6; i++)
43
{
44
Console.WriteLine("请输入编号 ==>");
45
tempNode.Num = Convert.ToInt32(Console.ReadLine());
46
Console.WriteLine("请输入编号({0})的姓名",tempNode.Num);
47
tempNode.Name = Console.ReadLine();
48
tempNode.Next = new Node();
49
tempNode.Next.Next = null;
50
tempNode = tempNode.Next;
51
}
52
Console.WriteLine("邮寄数据:");
53
tempNode = head;
54
for( i = 0; i < 6; i++)
55
{
56
Console.WriteLine("编号:{0}",tempNode.Num);
57
Console.WriteLine("姓名:{0}",tempNode.Name);
58
tempNode = tempNode.Next;
59
}
60
}
61
}
using System;2

3
class Node4
{5
private int num;6
7
public int Num8
{9
set{num = value;}10
get{return num;}11
}12
13
private string name;14
15
public string Name16
{17
set{name = value;}18
get{return name;}19
}20
21
private Node next;22
23
public Node Next24
{25
set{next = value;}26
get{return next;}27
}28
}29

30
class Test31
{32
public static void Main()33
{34
Node head;35
Node tempNode;36
int i;37
38
head = new Node();39
head.Next = null;40
tempNode = head;41
Console.WriteLine("请输入六项邮寄数据:");42
for( i = 0 ;i < 6; i++)43
{44
Console.WriteLine("请输入编号 ==>");45
tempNode.Num = Convert.ToInt32(Console.ReadLine());46
Console.WriteLine("请输入编号({0})的姓名",tempNode.Num);47
tempNode.Name = Console.ReadLine();48
tempNode.Next = new Node();49
tempNode.Next.Next = null;50
tempNode = tempNode.Next;51
}52
Console.WriteLine("邮寄数据:");53
tempNode = head;54
for( i = 0; i < 6; i++)55
{56
Console.WriteLine("编号:{0}",tempNode.Num);57
Console.WriteLine("姓名:{0}",tempNode.Name);58
tempNode = tempNode.Next;59
}60
}61
}不过这个版本(包括C和C#代码)的链表创建有一些问题,你看出来了吗?
本来应该分配6个节点,可上面的代码却分配了7个节点,产生这种错误的原因是因为没有独立处理第一个节点。链表中的第一个节点是链表操作的特例,需要独立处理。
改改以后的代码如下:
C版本 :
1
#include<stdio.h>
2![]()
3
struct llist
4
{
5
int num;
6
char name[10];
7
struct llist *next;
8
};
9
typedef struct llist node;
10
typedef node *llink;
11![]()
12
void main()
13
{
14
llink head;
15
llink ptr,ptr1;
16
int i;
17
18
head = (llink)malloc(sizeof(node)); //分配第一个节点
19
if(!head)
20
{
21
printf("内存分配失败!\n");
22
exit(1);
23
}
24
25
printf("请输入六项邮寄数据:\n");
26
printf("请输入编号 ==> ");
27
scanf("%d",&head->num);
28
printf("请输入编号(%d)的姓名 ==> ",head->num);
29
scanf("%s",head->name);
30
head->next = NULL;
31
ptr = head;
32
for(i = 1;i < 6; i++)
33
{
34
ptr1 = (llink)malloc(sizeof(node));
35
if(!ptr1)
36
{
37
printf("内存分配失败!\n");
38
exit(1);
39
}
40
printf("请输入编号 ==> ");
41
scanf("%d",&ptr1->num);
42
printf("请输入编号(%d)的姓名 ==> ",ptr1->num);
43
scanf("%s",ptr1->name);
44
ptr1->next = NULL;
45
ptr -> next = ptr1;
46
ptr = ptr ->next;
47
}
48
printf("邮寄数据:\n");
49
ptr = head;
50
for(i = 0;i < 6;i++)
51
{
52
printf("编号:%d\n",ptr->num);
53
printf(" 姓名 : %s\n",ptr->name);
54
ptr = ptr->next;
55
}
56
}
#include<stdio.h>2

3
struct llist4
{5
int num;6
char name[10];7
struct llist *next;8
};9
typedef struct llist node;10
typedef node *llink;11

12
void main()13
{14
llink head;15
llink ptr,ptr1;16
int i;17
18
head = (llink)malloc(sizeof(node)); //分配第一个节点19
if(!head)20
{21
printf("内存分配失败!\n");22
exit(1);23
}24
25
printf("请输入六项邮寄数据:\n");26
printf("请输入编号 ==> ");27
scanf("%d",&head->num);28
printf("请输入编号(%d)的姓名 ==> ",head->num);29
scanf("%s",head->name);30
head->next = NULL;31
ptr = head; 32
for(i = 1;i < 6; i++)33
{34
ptr1 = (llink)malloc(sizeof(node));35
if(!ptr1)36
{37
printf("内存分配失败!\n");38
exit(1);39
}40
printf("请输入编号 ==> ");41
scanf("%d",&ptr1->num);42
printf("请输入编号(%d)的姓名 ==> ",ptr1->num);43
scanf("%s",ptr1->name);44
ptr1->next = NULL;45
ptr -> next = ptr1;46
ptr = ptr ->next;47
}48
printf("邮寄数据:\n");49
ptr = head;50
for(i = 0;i < 6;i++)51
{52
printf("编号:%d\n",ptr->num);53
printf(" 姓名 : %s\n",ptr->name);54
ptr = ptr->next;55
}56
} 1
using System;
2![]()
3
class Node
4
{
5
private int num;
6
7
public int Num
8
{
9
set{num = value;}
10
get{return num;}
11
}
12
13
private string name;
14
15
public string Name
16
{
17
set{name = value;}
18
get{return name;}
19
}
20
21
private Node next;
22
23
public Node Next
24
{
25
set{next = value;}
26
get{return next;}
27
}
28
}
29![]()
30
class Test
31
{
32
public static void Main()
33
{
34
Node head;
35
Node tempNode,tempNode1;
36
int i;
37
38
head = new Node();
39
Console.WriteLine("请输入六项邮寄数据:\n");
40
Console.WriteLine("请输入编号==>");
41
head.Num = Convert.ToInt32(Console.ReadLine());
42
Console.WriteLine("请输入编号({0})的姓名 ==>",head.Num);
43
head.Name = Console.ReadLine();
44
head.Next = null;
45
tempNode = head;
46
for( i = 1 ;i < 6; i++)
47
{
48
tempNode1 = new Node();
49
Console.WriteLine("请输入编号 ==>");
50
tempNode1.Num = Convert.ToInt32(Console.ReadLine());
51
Console.WriteLine("请输入编号({0})的姓名",tempNode1.Num);
52
tempNode1.Name = Console.ReadLine();
53
tempNode1.Next = null;
54
tempNode.Next = tempNode1;
55
tempNode = tempNode.Next;
56
}
57
Console.WriteLine("邮寄数据:");
58
tempNode = head;
59
for( i = 0; i < 6; i++)
60
{
61
Console.WriteLine("编号:{0}",tempNode.Num);
62
Console.WriteLine("姓名:{0}",tempNode.Name);
63
tempNode = tempNode.Next;
64
}
65
}
66
}
using System;2

3
class Node4
{5
private int num;6
7
public int Num8
{9
set{num = value;}10
get{return num;}11
}12
13
private string name;14
15
public string Name16
{17
set{name = value;}18
get{return name;}19
}20
21
private Node next;22
23
public Node Next24
{25
set{next = value;}26
get{return next;}27
}28
}29

30
class Test31
{32
public static void Main()33
{34
Node head;35
Node tempNode,tempNode1;36
int i;37
38
head = new Node();39
Console.WriteLine("请输入六项邮寄数据:\n");40
Console.WriteLine("请输入编号==>");41
head.Num = Convert.ToInt32(Console.ReadLine());42
Console.WriteLine("请输入编号({0})的姓名 ==>",head.Num);43
head.Name = Console.ReadLine();44
head.Next = null;45
tempNode = head;46
for( i = 1 ;i < 6; i++)47
{48
tempNode1 = new Node();49
Console.WriteLine("请输入编号 ==>");50
tempNode1.Num = Convert.ToInt32(Console.ReadLine());51
Console.WriteLine("请输入编号({0})的姓名",tempNode1.Num);52
tempNode1.Name = Console.ReadLine();53
tempNode1.Next = null;54
tempNode.Next = tempNode1;55
tempNode = tempNode.Next;56
}57
Console.WriteLine("邮寄数据:");58
tempNode = head;59
for( i = 0; i < 6; i++)60
{61
Console.WriteLine("编号:{0}",tempNode.Num);62
Console.WriteLine("姓名:{0}",tempNode.Name);63
tempNode = tempNode.Next;64
}65
}66
}参考资料:《数据结构C语言版》
wssmax的blog文章:c#数据结构研究———链表1
PS:我不是很清楚.NET中写数据结构的方式,以上C#代码只是纯粹按部就班改写C代码,如果有更好的方式,欢迎大家提醒,谢谢!


浙公网安备 33010602011771号