数据结构与算法源码
⑴ 怎么学好数据结构与算法,好难啊
李明杰老师:每周一道算法题 通关算法面试课(超清视频)网络网盘
链接:
若资源有问题欢迎追问~
⑵ java算法与数据结构代码
第1题:我给你搭建算法框架,具体需求,你只需往里面写Code即可:
publicclassProgram{
privatestaticfinalintN=6;
publicstaticvoidmain(String[]args){
Nodehead=newNode(-1,null);//定义头指针,带头结点的单链表
for(inti=0;i<N;i++){
Nodee=newNode(i+1,null);
tailInsert(head,e);
}
//Test
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();
}
}
/**
*@paramhead实施尾插法算法的单链表头指针
*@parame所需的元素
*/
privatestaticvoidtailInsert(Nodehead,Nodee){
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();//寻访单链表,直至到达单链表末尾
}
//实施尾插法
p.setNext(e);
}
}
classNode{
privateintid;//编号
privateNodenext;//单链表后继指针
privateStringvote;//选票
publicNode(){}
publicNode(intid,Nodenext){
super();
this.id=id;
this.next=next;
}
publicNode(intid,Nodenext,Stringvote){
super();
this.id=id;
this.next=next;
this.vote=vote;
}
@Override
publicStringtoString(){
return"Node[id="+id+",next="+next+"]";
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetNext(Nodenext){
this.next=next;
}
}
第2题:参看我以前的回答:https://..com/question/431512924412893084
算法思想已经写的清楚得不能在清楚了。转成Java就是小菜一碟。
⑶ 《数据结构》算法实现与分析高一凡中的源代码要怎么用
这个代码可以直接用。用的时候必须把include中的文件也保存好。
⑷ 求数据结构与算法实验 张铭 的完整源代码
不知道你要的是不是这个。
http://book.knowsky.com/book_6125.htm
⑸ 急!!!!!!!!!!!!高分求<数据结构及算法经典> 源代码
这个地址绝对好下的,你看看:
http://download.csdn.net/filedown/YXI=!178854
如果不行,发消息给我,传给你.
已经发到你信箱里了,看一下..
⑹ 学习stl源码和学习数据结构与算法的区别是什么
自己写了个快排20行,很满意,一看STL的sort几百行长的你开始怀疑人生。
自己实现了一下list,100行!很完美,一看STL的list一千行你又开始怀疑人生。
你看着一堆的template和InputIterator起鸡毛。
⑺ 《数据结构与算法分析:c语言描述》的源码答案,怎样确定哪个c程序是对应哪道题的啊
自己仔细看看不就知道了?
⑻ 数据结构问题,希望有完整源代码
先看题目,顺序表L的数据元素是整数且非递增有序,也就是有序的。
//1,2,3,3,4,5,8,8,.:非递减排列
//9,8,7,7,6,5,5,2,1,.:非递增排列
我们只需要使用两个标记,一个i,一个len,
然后线性扫描一遍线性表L,判断相邻两个数是否相等,相等len就不变,不想等len就+1.并且更新数组的值。最后注意边界条件即可。
代码实现如下,如果喜欢cout可以自行修改。线性表直接使用的数组表示。
#include<iostream>
#include<cstdio>
usingnamespacestd;
constintMAXN=256;
intmain(){
intL[MAXN],n,i,j,len,t;
scanf("%d",&n);
//根据键盘输入数据建立顺序表L
for(i=0;i<n;++i){
scanf("%d",&L[i]);
}
//输出顺序表
for(i=0;i<n;++i){
printf("%d",L[i]);
}
printf(" ");
//以O(n)的时间复杂度完成对值相同多余元素的删除
for(i=1,len=0;i<n;++i){
if(L[i]!=L[i-1]){
L[len]=L[i-1];
++len;
if(i==n-1){//注意边界条件
L[len]=L[i];
++len;
}
}
if(i==n-1&&L[i]==L[i-1]){//注意边界条件
L[len]=L[i];
++len;
}
}
//输出删除值相同多余元素后的顺序L
for(i=0;i<len;++i){
printf("%d",L[i]);
}
printf(" ");
//逆置顺序表L
for(i=0,j=len-1;i<=j;++i,--j){
t=L[i];
L[i]=L[j];
L[j]=t;
}
//输出逆置后的顺序表L
for(i=0;i<len;++i){
printf("%d",L[i]);
}
printf(" ");
return0;
}
//justdoit
⑼ 数据结构与算法演示系统完整简单的c++源代码,包哈内容有:线性表、二叉树、图、排序,急用!谢谢!
我有表和二叉树的,图和排序没有!那玩意不能简单的,一个就得100多行!而且只是。h文件。先给你2个吧!
#ifndef sqlIST_H
#define SQLIST_H
using namespace std;
template<class elemtype>
class sqlist
{
public:
sqlist(){head=NULL; n=0;}
virtual ~sqlist(){head=NULL;}
bool insert(const elemtype& ,int);
elemtype find(int );
void clear();
int length()const {return n;}
bool Delete(int );
protected:
int n;
struct node{
node *next;
elemtype data;
};
node *head;
};
template<class elemtype>
void sqlist<elemtype>::clear()
{
node *p,*q;
int i=1;
p=head;
while(i!=n)
{
q=p;
delete q;
p=p->next;
i++;
}
}
template<class elemtype>
bool sqlist<elemtype>::insert(const elemtype &e,int i)
{
node *p,*q;
int j=1;
if(head==NULL)
head=new node;
p=head;
if(i==1&&i>n)//表头赋值
{head->data=e;
n++;
return true;}
else if(i==1&&i<=n)//表头插入
{
head=new node;
head->data=e;
head->next=p;
n++;
return true;
}
else if(i<=n) //表中插入
{
q=new node;
q->data=e;
while(j<i-1){
p=p->next;
j++;
}
q->next=p->next;
p->next=q;
n++;
return true;}
else if(i==n+1&&i!=1)//表尾插入
{
q=new node;
q->data=e;
while (j<n)
{
p=p->next;
j++;
}
p->next=q;
q->next=NULL;
n++;
return true;}
else
return false;
}
template<class elemtype>
elemtype sqlist<elemtype>::find(int i)
{
int j=1;
node *p;
p=head;
while(j<i){
p=p->next;
j++;
}
return p->data;
}
template<class elemtype>
bool sqlist<elemtype>::Delete(int i)
{
int j=1;
node *p,*q;
p=head;
if(i!=1)//表中及表尾删除
{
while(j<i)
{
q=p;
p=p->next;
j++;
}
q->next=p->next;
delete p;
n--;
return true;}
else//表头删除
head=p->next;
delete p;
n--;
return true;
}
#endif // SQLIST_H
#ifndef binarytree_H
#define binarytree_H
#include"stack.h"
#include"queue.h"
using namespace std;
template<class elemtype>
class binarytree{
public:
binarytree(){root=NULL;}
~binarytree(){}
int height(){return height(root);}
int size(){return size(root);}
void createtree(elemtype flag);
void preorder() const ;
void midorder() const ;
void postorder() const ;
bool isempty(){return root==NULL;}
void clear(){if (root!=NULL) clear(root);}
void delleft(){ clear(root->left);}
int height()const{return height(root );}
void delright(){return clear(root->right);}
private:
struct node{
node *left,*right;
elemtype data;
node():left(NULL),right(NULL){}
node(elemtype it,node*l=NULL,node*r=NULL):data(it),left(l),right(r){}
};
node *root;
struct stnode{
node *t;
int step;
stnode(node *tc=NULL):t(tc),step(0){}
};
void clear(node *);
int size(node* );
int height(node*);
};
template<class elemtype>
void binarytree<elemtype>:: clear(node *t)
{
queue<node> la;
node *tem,*q,*p;
la.append(t);
while(!la.empty()){
tem=la.putelem();
if(tem->left!=NULL)
{ p=t->left;
la.append(p);}
if(tem->right!=NULL)
{ q=tem->right;
la.append(q);}
delete tem;
}
}
template<class elemtype>
void binarytree<elemtype>::createtree(elemtype flag)
{
queue<node*> la;
node *tem;
elemtype x,ldata,rdata;
cout<<"根节点:";
cin>>x;
root=new node(x);
la.append(root);
while(!la.isempty()){
tem=la.putelem();
cout<<"输入"<<tem->data<<"的两节点值:";
cin>>ldata>>rdata;
if(ldata!=flag) la.append(tem->left=new node(ldata));
if(rdata!=flag) la.append(tem->right=new node(rdata));
}
}
template<class elemtype>
void binarytree<elemtype>::preorder( )const
{
stack<node*> la;
node *tem;
cout<<"前序遍历为:";
la.push(root);
while(!la.empty()){
tem=la.pop();
cout<<tem->data<<" ";
if(tem->right!=NULL)
la.push(tem->right);
if(tem->left!=NULL)
la.push(tem->left);
}
}
template<class elemtype>
void binarytree<elemtype>::midorder() const
{
stack<stnode> la;
stnode tem(root);
cout<<"中序遍历:";
la.push(tem);
while(!la.empty()){
tem=la.pop();
if(++tem.step==2){
cout<<tem.t->data<<" ";
if(tem.t->right!=NULL)
la.push(stnode(tem.t->right));}
else{
la.push(tem);
if(tem.t->left!=NULL)
la.push(stnode(tem.t->left));
}
}
}
template<class elemtype>
void binarytree<elemtype>::postorder() const
{
stack<stnode> la;
stnode tem(root);
cout<<"后序遍历:";
la.push(tem);
while(!la.empty()){
tem=la.pop();
if(++tem.step==3)
{cout<<tem.t->data<<" ";continue;}
la.push(tem);
if(tem.step==1)
{
if(tem.t->left!=NULL)
la.push(stnode(tem.t->left));
}
else{
if(tem.t->right!=NULL)
la.push(stnode(tem.t->right));
}
}
}
template<class elemtype>
int binarytree<elemtype>::size(node *t)
{
queue<node*> la;
node *tem;
int a=0;
la.append(t);
while(!la.isempty()){
tem=la.putelem();
a++;
if(tem->left!=NULL)
la.append(tem->left);
if(tem->right!=NULL)
la.append(tem->right);
}
return a;
}
template<class elemtype>
int binarytree<elemtype>::height(node* t)const
{
queue<node*> la;
atack<node*> lb;
node *tmp;
la.append(t);
while(!la.isempty())
{
tmp=la.putelem();
if(tmp->left)
}
/*if(t==NULL) return 0;
else
{
int l=height(t->left),r=height(t->right);
return 1+((l>r)?l:r);
}*/
}
}
你还不如用stl!而且你要这玩意干什么?c++书里都有的,实在不行自己抄书不也行吗?c++的表分单链表,循环单链表,循环双链表(我给的只是单链表)。二叉树我自己用的非递归实现,除了求高度。但要用到栈和队列,你自己写吧,太多了!发着麻烦。