数据结构与算法(1)
2010-02-27 10:30
253 查看
准备换工作了,把一些内容复习一遍,有些东西很多年都不看的,面试的时候问道了真的不好怎么说,别人说你“这都是基础的东西,你这都不会?”弄的人很郁闷。
下面都是一些经典的算法
数组
1.输出自然数0-N以内的质数
static const int N = 1000;
int main()
{
int i, a
;
for(int i = 2; i < N; ++i)
{
a[i] = 1;
}
for(int i = 2; i < N; ++i)
{
if(a[i])
{
for(int j = i; j*i < N; ++j)
a[i*j] = 0;
}
}
for(int i = 2; i < N; ++i)
{
if(a[i])
cout<<" "<< i;
}
cout<<endl;
}
链表
template<class T>
struct Node
{
T mData;
Node *next;
Node(T data):mData(data),next(0){}
};
1.约瑟夫环,循环链表实现
void fun(int N, int M)
{
Node<int> *head = new Node<int>(1);
for(int i = 2; i <= N; ++i)
{
Node<int> *p = head;
while(p->next)
p = p->next;
Node<int> *temp = new Node<int>(i);
p->next = temp;
if(i == N)
temp->next = head;
}
while(head->next != head)
{
for(int i = 1; i < M-1; ++i)
head = head->next;
Node<int> *p = head->next;
head->next = head->next->next;
delete P;
}
cout<<head->mData<<endl;
delete head;
}
2.单向链表的逆转 2种方法实现
template<class T>
class SingleList
{
public:
SingleList();
~SingleList();
void pushback(T data);
void reverse();
void reverse(int);
private:
Node<T> *head;
};
template<class T>
SingleList<T>::SingleList()
:head(0)
{
}
template<class T>
SingleList<T>::~SingleList()
{
while(head->next)
{
Node<T> *p = head;
head = head->next;
delete p;
}
if(head)
{
delete head;
}
}
template<class T>
void SingleList<T>::pushback(T data)
{
if(!head)
{
head = new Node<T>(data);
}
else
{
Node<T> *p = head;
while(p->next)
p = p->next;
p->next = new Node<T>(data);
}
}
template<class T>
void SingleList<T>::reverse()
{
Node<T> *t, *r, *y;
r = 0;
y = head;
while(y)
{
t = y->next;
y->next = r;
r = y;
y = t;
}
head = r;
}
template<class T>
void SingleList<T>::reverse(int)
{
Node<T> *end = new Node<T>(head->mData);
while(head->next)
{
Node<T> *p = head;
head = head->next;
delete p;
Node<T> *temp = new Node<T>(head->mData);
temp->next = end;
end = temp;
}
head = end;
}
下面都是一些经典的算法
数组
1.输出自然数0-N以内的质数
static const int N = 1000;
int main()
{
int i, a
;
for(int i = 2; i < N; ++i)
{
a[i] = 1;
}
for(int i = 2; i < N; ++i)
{
if(a[i])
{
for(int j = i; j*i < N; ++j)
a[i*j] = 0;
}
}
for(int i = 2; i < N; ++i)
{
if(a[i])
cout<<" "<< i;
}
cout<<endl;
}
链表
template<class T>
struct Node
{
T mData;
Node *next;
Node(T data):mData(data),next(0){}
};
1.约瑟夫环,循环链表实现
void fun(int N, int M)
{
Node<int> *head = new Node<int>(1);
for(int i = 2; i <= N; ++i)
{
Node<int> *p = head;
while(p->next)
p = p->next;
Node<int> *temp = new Node<int>(i);
p->next = temp;
if(i == N)
temp->next = head;
}
while(head->next != head)
{
for(int i = 1; i < M-1; ++i)
head = head->next;
Node<int> *p = head->next;
head->next = head->next->next;
delete P;
}
cout<<head->mData<<endl;
delete head;
}
2.单向链表的逆转 2种方法实现
template<class T>
class SingleList
{
public:
SingleList();
~SingleList();
void pushback(T data);
void reverse();
void reverse(int);
private:
Node<T> *head;
};
template<class T>
SingleList<T>::SingleList()
:head(0)
{
}
template<class T>
SingleList<T>::~SingleList()
{
while(head->next)
{
Node<T> *p = head;
head = head->next;
delete p;
}
if(head)
{
delete head;
}
}
template<class T>
void SingleList<T>::pushback(T data)
{
if(!head)
{
head = new Node<T>(data);
}
else
{
Node<T> *p = head;
while(p->next)
p = p->next;
p->next = new Node<T>(data);
}
}
template<class T>
void SingleList<T>::reverse()
{
Node<T> *t, *r, *y;
r = 0;
y = head;
while(y)
{
t = y->next;
y->next = r;
r = y;
y = t;
}
head = r;
}
template<class T>
void SingleList<T>::reverse(int)
{
Node<T> *end = new Node<T>(head->mData);
while(head->next)
{
Node<T> *p = head;
head = head->next;
delete p;
Node<T> *temp = new Node<T>(head->mData);
temp->next = end;
end = temp;
}
head = end;
}
相关文章推荐
- 如何学好数据结构与算法的若干疑问解答(2)
- 数据结构与算法(C++)之零——异常类(Exceptions)
- 快速排序 (QuickSort) Java数据结构与算法
- 数据结构与算法中的“递归”——用回溯法求解8皇后问题
- 数据结构与算法回顾之二叉树的遍历(下)
- 数据结构与算法(3)——二叉堆
- 转载数据结构与算法
- 数据结构与算法书籍推荐
- 搜索算法 读数据结构与算法
- 数据结构与算法 概述
- 常用数据结构与算法之查找算法
- 数据结构与算法复习(3)—— 线段树
- 重温数据结构与算法(1) 构建自己的时间测试类
- 微软等数据结构与算法面试100题 第三题
- 数据结构与算法
- 二级公共基础之——数据结构与算法
- [Z]董的博客-数据结构与算法汇总
- 程序员求职成功路(2) - 第3章 数据结构与算法
- 数据结构与算法
- C++ 数据结构与算法(一)线性表之顺序表