实现单链表的增加删除定位等功能。(编译执行环境vc6.0,因为目标院校上机考是用这个版本的)
1 #include<stdio.h>
2 #include<malloc.h>
3 #include<stdlib.h>
4 #include<time.h>
5
6
7 typedef struct LNode
8 {
9 int data;
10 struct LNode *next;
11 }LNode;
12
13 //初始化单链表
14 int initList(LNode *&L)
15 {
16 L = (LNode *)malloc(sizeof(LNode));
17 L->next = NULL;
18 printf("链表初始化成功\n");
19 return 1;
20 }
21
22
23 //给定一个单链表初值,后续每个结点为累计+3赋值 ,长度为n(头插法)
24 int InsertList(LNode *L, int s ,int n)
25 {
26 if(n<1)
27 {
28 printf("请输入正确的长度!!");
29 return 0;
30 }
31 //t用来指向新生成的节点
32 LNode *t;
33
34 int p=0;
35 int q=s;
36 while(p<n)
37 {
38 t=(LNode *)malloc(sizeof(LNode));
39 t->data=q;
40 t->next=L->next;
41 L->next=t;
42 q-=3;
43 p++;
44 }
45 return 1;
46
47 }
48
49
50 //给定一个单链表初值,后续每个结点为累计+3赋值 ,长度为n(尾插法)
51 int InsertList2(LNode *L, int s ,int n)
52 {
53 if(n<1)
54 {
55 printf("请输入正确的长度!!");
56 return 0;
57 }
58 //t用来指向新生成的节点
59 LNode *t,*r;
60 r=L;
61
62 int q=s;
63 for(int i=0;i<n;i++)
64 {
65 t=(LNode*)malloc(sizeof(LNode));
66 t->data=q;
67 r->next=t;
68 r=r->next;
69 q+=3;
70 }
71 r->next=NULL;
72 return 1;
73
74 }
75 //遍历链表
76 void OutList(LNode *L)
77 {
78 LNode *p;
79 p=L->next;
80 while(p)
81 {
82 printf("%3d \n",p->data);
83 p=p->next;
84 }
85 }
86 //实现a,b两个有序链表的有序拼接,拼接后为串c
87 void merge(LNode *a,LNode *b,LNode *&c)
88 {
89 LNode *p=a->next;
90 LNode *q=b->next;
91 LNode *r;
92 c=a;
93 c->next=NULL;
94 free(b);
95 r=c;
96 while(p!=NULL && q!=NULL)
97 {
98 if(p->data<=q->data)
99 {
100 r->next=p;
101 p=p->next;
102 r=r->next;
103 }
104 else
105 {
106 r->next=q;
107 q=q->next;
108 r=r->next;
109 }
110 }
111 r->next=NULL;
112 if(p!=NULL)
113 r->next=p;
114 if(q!=NULL)
115 r->next=q;
116 }
117 //查找链表中是否存在值为x的元素,若存在则删除,否则返回0
118 int findAndDelete(LNode *L,int x)
119 {
120 LNode *p,*q;
121 p=L;
122 while(p->next!=NULL)
123 {
124 if(p->next->data==x)
125 break;
126 p=p->next;
127
128 }
129 if(p->next==NULL)
130 {
131 return 0;
132 }
133 else
134 {
135 q=p->next;
136 p->next=p->next->next;
137 free(q);
138 return 1;
139 }
140 }
141 void main()
142 {
143 LNode *L;
144 LNode *t;
145 LNode *L1;
146 initList(L);
147 initList(L1);
148 if(InsertList2(L,5,5)==1)
149 {
150 printf("赋值成功\n");
151 }else
152 printf("赋值失败");
153 if(InsertList(L1,30,5)==1)
154 {
155 printf("赋值成功\n");
156 }else
157 printf("赋值失败");
158
159 merge(L1,L,t);
160 OutList(t);
161 findAndDelete(t,5);
162 OutList(t);
163
164 }