1 #include<iostream>
2 using namespace std;
3
4 struct ListNode
5 {
6 int num;
7 char name[20];
8 ListNode *link;
9 };
10
11 ListNode *first,*last;
12
13 void Create()//建立一个链表
14 {
15 ListNode *p,*q;
16 int i;
17 q=first;//新节点要把节点设为空
18 while(1)
19 {
20 p=new ListNode;
21 cout<<"输入学号:";
22 cin>>p->num;
23 cout<<"输入姓名拼音:";
24 cin>>p->name;
25 p->link=q->link;
26 q->link=p;
27 q=p;
28 cout<<"是否继续?(1/0)";
29 cin>>i;
30 if(i==0)
31 {
32 cout<<"链表建立完毕。"<<endl;
33 break;
34 }
35 }
36 last=p;
37 }
38
39 void Output()//输出
40 {
41 ListNode *p=first->link;
42 while(p!=NULL)
43 {
44 cout<<"学号:"<<p->num<<":";
45 cout<<"姓名:"<<p->name<<endl;
46 p=p->link;
47 }
48 }
49
50 ListNode* FindIndex(const int i)//查找第i个元素
51 {
52 if(i<=-1) return first;
53 ListNode *p=first->link;
54 int j=0;
55 while(p!=NULL&&j<i)
56 {
57 if(p->num==i) break;
58 p=p->link;
59 j++;
60 }
61 return p;
62 }
63
64 ListNode* Insert(int valua,int i)//插入一个值
65 {
66 ListNode *p,*q;
67 q=new ListNode;//申请一个新节点
68 p=FindIndex(i-1);//找到插入位置的前一位置,在它的后方插入VALUA
69 if(p==NULL) return NULL;
70 q->link=p->link;
71 q->num=valua;
72 p->link=q;
73 if(q->link==NULL)
74 last=q;
75 return q;
76 }
77
78 void RemoveAfter(ListNode *cl)//删除CL节点之后的一个节点
79 {
80 ListNode *newlink=cl->link;
81 if(newlink!=NULL)
82 {
83 cl->link=newlink->link;
84 delete newlink;
85 }
86 }
87
88 void RemoveCur(ListNode *cl)//删除单个节点
89 {
90 ListNode *p=first;
91 while(p->link!=cl)
92 {
93 p=p->link;
94 }
95 p->link=cl->link;
96 delete cl;
97 }
98
99 void length()//计算链表长度
100 {
101 int len=0;
102 ListNode *p=first->link;
103 while(p!=NULL)
104 {
105 p=p->link;
106 len++;
107 }
108 cout<<"链表长度为:"<<len<<endl;
109 }
110
111
112
113 void main()
114 {
115 first=new ListNode;
116 first->link=NULL;
117
118 Create();
119 Output();
120
121 int m;
122 cout<<"查找学号:";
123 cin>>m;
124 ListNode *n=FindIndex(m);
125 cout<<n->num<<":"<<n->name<<endl;
126
127 int del;
128 cout<<"需要删除的学号:";
129 cin>>del;
130 ListNode *delet=FindIndex(del);
131 RemoveCur(delet);
132
133 Output();
134 length();
135 }