(1)编程实现单链表的基本操作:建立单链表,查找单链表,插入单链表,删除单链表;
(2)采用单链表结构编程实现:两个有序单链表的归并运算。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114/* (1) */ #include <iostream> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; bool InitList(LinkList &L); void CreateList(LinkList &L,int n); void PrintList(LinkList L); void FoundList(LinkList L,int e); void InsertList(LinkList &L,int i,int e); void DeleteList(LinkList &L,int i); using namespace std; int main(){ int n,e,insertn,inserte,deleten; LinkList L; InitList(L); cout<<"请输入单链表长度:"; cin>>n; CreateList(L,n); PrintList(L); cout<<"请输入要查找的值:"; cin>>e; FoundList(L,e); cout<<"请输入要插入的位置:"; cin>>insertn; cout<<"请输入要插入的值:"; cin>>inserte; InsertList(L,insertn,inserte); cout<<"请输入要删除的位置:"; cin>>deleten; DeleteList(L,deleten); return 0; } //初始化单链表 bool InitList(LinkList &L){ L=new LNode; L->next=NULL; return true; } //建立单链表(后插法) void CreateList(LinkList &L,int n){ LinkList r,p; L=new LNode; L->next=NULL; r=L; cout<<"请输入单链表:"; for(int i=0;i<n;i++){ p=new LNode; cin>>p->data; p->next=NULL; r->next=p; r=p; } } //打印单链表 void PrintList(LinkList L){ LinkList p; p=L->next; cout<<"单链表为:"; while(p){ cout<<p->data<<" "; p=p->next; } cout<<endl; } //查找单链表 void FoundList(LinkList L,int e){ LinkList p; p=L->next; int counts=0; while(p){ if(p->data==e){ counts++; cout<<"第"<<counts<<"次找到了与"<<e<<"相等的值"<<endl; } p=p->next; } if(counts==0){ cout<<"没有找到与"<<e<<"相等的值"<<endl; } } //插入单链表,在第i个位置插入值为e的结点 void InsertList(LinkList &L,int i,int e){ LinkList p,s; p=L; int counts=0; while(p&&(counts<i-1)){ p=p->next; counts++; } s=new LNode; s->data=e; s->next=p->next; p->next=s; PrintList(L); } //删除单链表,删除第i个位置的结点 void DeleteList(LinkList &L,int i){ LinkList s; LinkList p=L; int counts=0; while(p&&(counts<i-1)){ p=p->next; counts++; } s=p->next; p->next=s->next; delete s; PrintList(L); }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99/* (2) */ #include <iostream> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; bool InitList(LinkList &L); void CreateList(LinkList &L,int n); void PrintList(LinkList L); LinkList MergeList(LinkList A,LinkList B,LinkList &C); using namespace std; int main(){ int na,nb; LinkList A; InitList(A); cout<<"请输入单链表长度:"; cin>>na; CreateList(A,na); PrintList(A); LinkList B; InitList(B); cout<<"请输入单链表长度:"; cin>>nb; CreateList(B,nb); PrintList(B); LinkList C; InitList(C); C=MergeList(A,B,C); PrintList(C); return 0; } //两个有序单链表的归并 LinkList MergeList(LinkList A,LinkList B,LinkList &C){ LinkList a,b,c; a=A->next; b=B->next; C=A; c=C; while(a&&b){ if(a->data<=b->data){ c->next=a; c=a; a=a->next; }else{ c->next=b; c=b; b=b->next; } } c->next=a?a:b; delete B; return C; } //建立有序单链表(后插法) void CreateList(LinkList &L,int n){ LinkList r,p; L=new LNode; L->next=NULL; r=L; cout<<"请输入单链表:"; for(int i=0;i<n;i++){ p=new LNode; cin>>p->data; p->next=NULL; r->next=p; r=p; } LinkList a,b; int temp; for(a=L->next;a!=NULL;a=a->next){ for(b=a->next;b!=NULL;b=b->next){ if(a->data>b->data){ temp=a->data; a->data=b->data; b->data=temp; } } } } //初始化单链表 bool InitList(LinkList &L){ L=new LNode; L->next=NULL; return true; } //打印单链表 void PrintList(LinkList L){ LinkList p; p=L->next; cout<<"单链表为:"; while(p){ cout<<p->data<<" "; p=p->next; } cout<<endl; }
最后
以上就是合适菠萝最近收集整理的关于单链表的基本操作(c++实现)的全部内容,更多相关单链表内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复