今天关注的主题是链表的相关操作,这里使用链表(单向)主要解决动态存储数据体列表的问题。
直接贴代码先:
se.h
#ifndef LIBTEST_SE_H
#define LIBTEST_SE_H
#include <stdio.h>
class seTest{
public:
struct Elist{
int eid;
Elist *next;
};
};
#endif;
main.cpp
1
/**//*
2
功能描述: c/c++ 链表的实现测试
3
创建时间: 2009-04-16
4
5
*/
6
7
#include "stdafx.h"
8
#include "iostream"
9
#include "se.h"
10
using namespace std;
11
12
void InsertEndList(seTest::Elist *head, seTest::Elist *elist);
13
seTest::Elist* InsertSortList(seTest::Elist *head, seTest::Elist *elist);
14
seTest::Elist* DeleteFromList(seTest::Elist *head, int id);
15
void Print(seTest::Elist *head);
16
17
void main()
18

{
19
seTest::Elist *elist;
20
elist=(seTest::Elist*)malloc(sizeof(seTest::Elist));
21
elist->eid=2;
22
elist->next =NULL;
23
24
seTest::Elist *oneptr_1;
25
oneptr_1=(seTest::Elist*)malloc(sizeof(seTest::Elist));
26
oneptr_1->eid=1;
27
oneptr_1->next=NULL;
28
//InsertEndList(elist, oneptr_1); //将节点插到链表尾部
29
elist = InsertSortList(elist, oneptr_1); //按顺序插入节点
30
31
seTest::Elist *oneptr_2;
32
oneptr_2=(seTest::Elist*)malloc(sizeof(seTest::Elist));
33
oneptr_2->eid=3;
34
oneptr_2->next=NULL;
35
//InsertEndList(elist, oneptr_2); //将节点插到链表尾部
36
elist = InsertSortList(elist, oneptr_2); //按顺序插入节点
37
38
//通过ID删除链表中元素
39
elist = DeleteFromList(elist,2);
40
41
//输出链表数据
42
Print(elist);
43
cin.get();
44
}
45
46
//将数据插入链表中(直接插入到链表尾部)
47
void InsertEndList(seTest::Elist *head, seTest::Elist *elist)
48

{
49
seTest::Elist *p;
50
if(head==NULL)
51
{
52
head = elist;
53
}
54
else
55
{
56
p = head;
57
while(true)
58
{
59
p->eid;
60
if(p->next==NULL)
61
{
62
p->next = elist;
63
p = p->next;
64
break;
65
}
66
else
67
{
68
p = p->next;
69
}
70
}
71
}
72
}
73
74
//将数据插入链表中(排序链表)
75
seTest::Elist* InsertSortList(seTest::Elist *head, seTest::Elist *elist)
76

{
77
seTest::Elist *p,*fp; //*p:当前节点指针 *fp:上一个节点指针
78
if(head==NULL)
79
{
80
head = elist;
81
}
82
else
83
{
84
//待插入节点值比头节点值小,直接插入到链表前面
85
if(elist->eid < head->eid)
86
{
87
elist->next = head;
88
head = elist;
89
}
90
else
91
{
92
fp = head;
93
p = head->next;
94
while(true)
95
{
96
if(p==NULL)
97
{
98
fp->next = elist;
99
break;
100
}
101
else
102
{
103
//如果链表当前节点的值大于或等于要插入节点的值
104
if(p->eid>=elist->eid)
105
{
106
fp->next = elist;
107
elist->next = p;
108
break;
109
}
110
fp = p;
111
p = p->next;
112
}
113
}
114
}
115
}
116
return head;
117
}
118
119
//根据ID值在链表中删除对应的节点
120
seTest::Elist* DeleteFromList(seTest::Elist *head, int id)
121

{
122
seTest::Elist *p,*fp; //*p:当前节点指针 *fp:上一个节点指针
123
if(head==NULL)
124
{
125
cout<<"链表为空"<<endl;
126
&nb