大二开始都一个多月了,自从网赛之后就没多少刷题的欲望了,弱爆了,orz.
这个月没刷什么题,所以怒刷水题,感觉越刷越水了...
学校的课也没什么理由想去翘了,还是老老实实上课吧
数据结构还是蛮烦人的:
实 验 二
假设一学生信息文件中每个学生信息包括:学号(8位字符)、姓名(10个字符)、成绩(整型)及所用时间(整型),要求从该文件中读取每个学生的信息存入一双向循环链表中,然后按快速排序算法对其排序;排序的规则是:按成绩从高到低,成绩相同时所用时间少者在先,多者在后。要求输出排序后的结果。
#include <iostream>
#include <cstdio>
using namespace std;
typedef struct miao
{
char name[11];
int no,grade,time;
}miao;
typedef struct DulNode
{
miao data;
DulNode *prior,*next;
DulNode()
{
prior=this;
next=this;
}
}*DulLinkList;
DulLinkList L;
void Insert(DulNode *p,DulNode *s)
{
s->prior=p->prior; p->prior->next=s;
s->next=p; p->prior=s;
}
int cmp(miao p,miao q)
{
if(p.grade==q.grade)
{
return p.time<=q.time;
}
return p.grade>=q.grade;
}
DulNode *partition(DulNode *l,DulNode *r)
{
miao key=l->data;
while(l!=r)
{
while(l!=r&&cmp(key,r->data))
r=r->prior;
if(l!=r)
{
l->data=r->data;
l=l->next;
}
while(l!=r&&cmp(l->data,key))
l=l->next;
if(l!=r)
{
r->data=l->data;
r=r->prior;
}
}
l->data=key;
return l;
}
void Quick_Sort(DulNode *p,DulNode *q)
{
DulNode *r;
if(p!=q)
{
r=partition(p,q);
if(r!=p)
Quick_Sort(p,r->prior);
if(r!=q)
Quick_Sort(r->next,q);
}
}
void Create()
{
DulNode *s;
while(s=new DulNode,scanf("%d",&s->data.no)!=EOF)
{
scanf("%s%d%d",s->data.name,&s->data.grade,&s->data.time);
if(L==NULL)
L=s;
else
Insert(L,s);
}
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
Create();
Quick_Sort(L,L->prior);
DulNode *p;
p = L;
printf(" ID name grade time\n");
printf("%08d %10s %8d %8d\n", L->data.no, L->data.name, L->data.grade,L->data.time);
p = p->next;
while(p!=L)
{
printf("%08d %10s %8d %8d\n", p->data.no, p->data.name, p->data.grade,p->data.time);
p = p->next;
}
return 0;
}
然后输入输出文件我写的分别是:
20112101 张三 67 88
20112102 李四 56 89
20112103 王五 87 98
20112106 吴六 99 66
20112104 陈七 99 65
20112105 刘八 77 98
ID name grade time
20112104 陈七 99 65
20112106 吴六 99 66
20112103 王五 87 98
20112105 刘八 77 98
20112101 张三 67 88
20112102 李四 56 89
感觉还好,开始的时候写了个,因为野指针太多了直接被华哥否定了....
然后估计就是开始了栈和队列的学习
(p.s. 记得暑假的时候这些东西都是直接用的,喵的,写这么多恶心的函数)
顺序栈基本操作:
#include <iostream>
#include <cstdio>
using namespace std;
const int STACKSIZE=100;
const int INCREMENT=10;
typedef struct
{
int *elem;
int top;
int stacksize;
int increment;
}SqStack;
void Init(SqStack &S)
{
S.elem=new int[STACKSIZE];
S.top=0;
S.stacksize=STACKSIZE;
S.increment=INCREMENT;
}
void Destroy(SqStack &S)
{
delete S.elem;
S.top=0;
S.stacksize=0;
}
void Clear(SqStack &S)
{
S.top=0;
}
int Top(SqStack S)
{
if(S.top==0)
{
cout<<"空栈,输入不合法!"<<endl;
return 0;
}
else
return S.elem[S.top];
}
int Empty(SqStack S)
{
if(S.top==0)
return 1;
else
return 0;
}
void Push(SqStack &S,int e)
{
if(Empty(S))
{
S.elem=new int[STACKSIZE];
}
if(S.top==S.stacksize-1)
{
int a[INCREMENT+S.stacksize];
for(int i=1;i<S.stacksize;i++)
a[i]=S.elem[i];
delete S.elem;
S.elem=a;
S.stacksize+=INCREMENT;
}
S.elem[++S.top]=e;
}
void Pop(SqStack &S,int &e)
{
if(Empty(S))
{
cout<<"空栈,输入不合法!"<<endl;
return ;
}
else
e=S.elem[S.top--];
}
void Traverse(SqStack S)
{
cout<<S.elem[1];
for(int i=2;i<=S.top;i++)
cout<<" "<<S.elem[i];
cout<<endl;
cout<<S.top<<endl;
}
int main()
{
SqStack S;
Init(S);
//Clear(S);
Destroy(S);
for(int i=1;i<=5;i++)
Push(S,i);
Traverse(S);
return 0;
}