这一周特别的忙碌,特别是社团社联招新后,各种事情扑面而来。社联社团报名系统出现一些小bug导致需要退换社团必须人工操作,就向狒狒学了如何进行简单的数据库操作,在Navicat上更改数据。
数据结构的学习正在进行,还是觉得有些困难的,实验课可以做出来,但一般都不是老师课堂上讲的方法,对于指针还是一知半解。需要加强。概率论,Java的课也有点落下了,希望国庆恶补一下吧。
记录下C语言数据结构的难题
#include <iostream>
using namespace std;
class LNode{
int data;
LNode *next;
LNode(){next=NULL;}
friend class LinkList;
};
class LinkList{
LNode *head;
int len;
public:
LinkList();
~LinkList();
void CreateInTail(int n);
void outPut();
bool swap(int pa, int pb);
LNode* Index(int i);
};
LinkList::LinkList() {
head = new LNode;
len=0;
}
LinkList::~LinkList() {
LNode *p=head,*q;
while (p){
q=p;
p=p->next;
delete q;
}
head=NULL;
len=0;
}
void LinkList::CreateInTail(int n) {
len = n;
LNode *tail = head;
while (n--)
{
int item;
cin>>item;
LNode *s = new LNode;
s->data=item;
tail->next=s;
tail=s;
}
}
void LinkList::outPut() {
LNode *p = head->next;
while (p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
}
bool LinkList::swap(int pa, int pb) {
if(pa<1 || pb<1 || pa>len || pb>len)
return false;
LNode *p=Index(pa-1),*q=Index(pb-1);
if(p->next == q)//防止相邻节点爆炸
{
p->next=q->next;
q->next=p->next->next;
p->next->next=q;
return true;
}
LNode *t = p->next;//交换前驱
p->next = q->next;
q->next = t;
t = p->next->next;//交换后继
p->next->next = q->next->next;
q->next->next=t;
return true;
}
LNode *LinkList::Index(int i) {
if(i<0 || i>len)
return NULL;
LNode *p = head;
for(int j=0;j<i;j++)
p=p->next;
return p;
}
int main()
{
int n;
cin>>n;
LinkList myList;
myList.CreateInTail(n);
myList.outPut();
int pa,pb;
cin>>pa>>pb;
if(myList.swap(pa,pb))
myList.outPut();
else
cout<<"error"<<endl;
cin>>pa>>pb;
if(myList.swap(pa,pb))
myList.outPut();
else
cout<<"error"<<endl;
return 0;
}
附上答案。