数据结构与算法设计中的代码实现(1-3)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、基础数据结构

1.1 线性表

1.1.1 顺序表

#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
typedef struct{
	int data[MAXSIZE];
	int length;
	int capacity;
} SeqList;

SeqList* L;

SeqList * initList(){
	L=(SeqList *)malloc(sizeof(SeqList));
	L->length=0;
	L->capacity=MAXSIZE;
	return L;
}

int GetData(SeqList *L, int i){
	return L->data[i-1];
}

int Locate(SeqList * L,int data){
	if(L->length<=0){
		return -1;
	}
	else{
		for(int i=0;i<L->length;i++){
			if(L->data[i]==data){
				return i;
			}
		}
	}
	return -1;
}

int Delete(SeqList *L,int i){
	if(i>=L->length||i<0){
		return -1;
	}
	else{
		for(int j=i;j<L->length-1;j++){
			L->data[j]=L->data[j+1];
		}
		L->length--;
		return 1;
	}
}


int Insert(SeqList * L,int x) {
	if(L->length>=L->capacity){
		return -1;
	}
	else{
		L->data[L->length]=x;
		L->length++;
		return 1;
	}
}
 
void PrintList(SeqList * L){
	cout<<"List: ";
	for(int i=0;i<L->length;i++){
		cout<<L->data[i]<<" ";
	}
	cout<<endl;
} 
 
int main(){
	int a,b;
	cin>>a>>b;
	L=initList(); 
	Insert(L,a);
	Insert(L,b);
	int i=Locate(L,a);
	cout<<i<<endl;
	Delete(L,i);
	PrintList(L);
} 

1.1.2 单链表

#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct Node{
	int data;
	Node * next;
} LinkList;


LinkList* L;

LinkList * initLinkList(){
	L=(LinkList *)malloc(sizeof(LinkList));
	L->next=NULL;
	return L;
}


void HeadInsert(LinkList * L,int data){
	LinkList *p=(LinkList *)malloc(sizeof(LinkList));
	p->next=L->next;
	p->data=data;
	L->next=p;
}



void TailInsert(LinkList *L,int data){
	LinkList *p,*q;
	p=L->next;
	while(p->next!=NULL){
		p=p->next;
	}
	q=(LinkList *)malloc(sizeof(LinkList));
	q->next=NULL;
	q->data=data;
	p->next=q;
}


int GetLength(LinkList *L){
	LinkList *p;
	p=L;
	int count=0;
	while(p->next!=NULL){
		count++;
		p=p->next;
	}
	return count;
}

int Insert(LinkList *L,int i,int data){
	if(i>GetLength(L)){
		return -1;
	}
	else{
		int j=0;
		LinkList *p,*q;
		p=L;
		while(j<i){
			j++;
			q=p;
			p=p->next;
		}
		LinkList * k=(LinkList *)malloc(sizeof(LinkList));
		k->data=data;
		k->next=p;
		q->next=k;
		return 1;
	}
}

int FindLocation(LinkList *L, int data){
	LinkList *p;
	int count=0;
	p=L;
	while(p->next!=NULL){
		p=p->next;
		count++;
		if(p->data==data){
			return count;
		}
	}
	return -1;
}



void Delete(LinkList * L,int i){
	int count=0;
	LinkList *p,*q;
	p=L;
	while(p->next!=NULL){
		q=p;
		p=p->next;
		count++;
		if(count==i){
			break;
		}
	}
	q->next=p->next;
	free(p);
}
 
 
void PrintList(LinkList * L){
	LinkList * p=L->next;
	while(p!=NULL){
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
} 
 
int main(){
	int a,b;
	cin>>a>>b;
	L=initLinkList(); 
	HeadInsert(L,a);
	PrintList(L);
	TailInsert(L,b);
	PrintList(L);
	Delete(L,1);
	PrintList(L);	
} 

1.1.3 双向循环链表

#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct Node{
	int data;
	Node * next;
	Node * pre;
} LinkList;


LinkList* L;

LinkList * initLinkList(){
	L=(LinkList *)malloc(sizeof(LinkList));
	L->next=L;
	L->pre=L;
	return L;
}

int GetLength(LinkList *L){
	LinkList *p;
	p=L;
	int count=0;
	if(L->next==L){
		return 0;
	}
	else{
			while(p->next!=L){
	        	p=p->next;
	        	count++;
     	}
		return count;	
	}
}

void HeadInsert(LinkList * L,int data){
	LinkList *p=(LinkList *)malloc(sizeof(LinkList));
	p->next=L->next;
	p->data=data;
	L->next=p;
	p->pre=L;
}



void TrailInsert(LinkList *L,int data){
	LinkList *p,*q;
	p=L;
	while(p->next!=L){
		p=p->next;
	}
	q=(LinkList *)malloc(sizeof(LinkList));
	q->next=L;
	q->data=data;
	p->next=q;
	q->pre=p;
}




int Insert(LinkList *L,int i,int data){
	if(i>GetLength(L)){
		return -1;
	}
	else{
		int j=0;
		LinkList *p,*q;
		p=L;
		while(j<i){
			j++;
			q=p;
			p=p->next;
		}
		LinkList * k=(LinkList *)malloc(sizeof(LinkList));
		k->data=data;
		k->next=p;
		k->pre=q;
		p->pre=k;
		q->next=k;
		return 1;
	}
}

int FindLocation(LinkList *L, int data){
	LinkList *p;
	int count=0;
	p=L;
	while(p->next!=L){
		p=p->next;
		count++;
		if(p->data==data){
			return count;
		}
	}
	return -1;
}



void Delete(LinkList * L,int i){
	int count=0;
	LinkList *p,*q;
	p=L;
	while(p->next!=L){
		q=p;
		p=p->next;
		count++;
		if(count==i){
			break;
		}
	}
	q->next=p->next;
	p->next->pre=q;
	free(p);
}
 
 
void PrintList(LinkList * L){
	LinkList * p=L->next;
	while(p!=NULL){
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
} 
 
int main(){
	int a,b;
	cin>>a>>b;
	L=initLinkList();
	HeadInsert(L,a);
	TrailInsert(L,b);
	int length=GetLength(L);
	cout<<length<<endl;
} 

1.1.4 静态链表

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct Node{
	int data;
	int cursor;
} StaticList;

int * av;
int * start;
StaticList* L;

StaticList * initStaticList(){
	L=(StaticList *)malloc(MAXSIZE*sizeof(StaticList));
	for(int i=0;i<MAXSIZE-1;i++){
	   	L[i]->cursor=i+1;
	}
	L[MAXSIZE-1]->cursor=-1;
	*av=0;
	start=NULL;
	return L;
}

int GetLength(){
	if(start==NULL){
		return 0;
	}
	else{
		int count=1;
		int * p=*start;
		while(L[*p]->cursor!=-1){
			*p=L[*p]->cursor;
			count++;
		}
	}
	return count;
}


int Insert(StaticList *L,int i,int data){
	int count=0;
	if(i>GetLength()){
		return -1;
	}
	int * p=*start;
	while(L[*p]->cursor!=-1&&count!=i){
		*p=L[*p]->cursor;
		count++;
	}
	L[*av]->data=data;
	L[*av]->cursor=L[*p]->cursor;
	L[*p]->cursor=*av;
	int * temp=L[*av]->cursor;
	*av=*temp;	
	return 1;	
}

int Delete(StaticList * L,int i){
	int count=0;
	if(i>GetLength()){
		return -1;
	}
	int * p=*start;
	
	while(L[*p]->cursor!=-1&&count<i-1){
		*p=L[*p]->cursor;
		count++;
	}
	*temp=L[*p]->cursor;
	L[*p]->cursor=L[*temp]->cursor;
	L[*temp]->cursor=*av;
	*av=*temp;
	return 1;	
	
}

1.2 栈

1.2.1 顺序栈

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
    int data[MAXSIZE];
	int top;
	int capacity;	
	
}SeqStack;

SeqStack * S;

SeqStack * initStack(){
	S=(SeqStack *) malloc(sizeof(SeqStack));
	S->top=-1;
	S->capacity=MAXSIZE;
	return S;
}

int GetLength(SeqStack * S){
	return S->top+1;
}

int isFull(SeqStack *S){
	return S->top==S->capacity-1;
}
int isEmpty(SeqStack *S){
	return S->top==-1;
}

int Push(SeqStack *S,int data){
	if(isFull(S)){
		return -1;
	}
	S->top++; 
	S->data[S->top]=data;
	return 1;
}

int Pop(SeqStack * S){
	if(isEmpty(S)){
		return -1;
	}
	int x=S->data[S->top];
	S->top--;
	return x;
}

int GetTop(SeqStack *S){
	if(isEmpty(S)){
		return -1;
	}
	return S->data[S->top];
}

int main(){
	S=initStack();
	Push(S,1);
	cout<<GetTop(S)<<endl;
	Pop(S);
	cout<<isEmpty(S)<<endl;
}

1.2.2 双端栈

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
    int data[MAXSIZE];
	int top1;
	int top2;
	int capacity;	
	
}DStack;

DStack * S;

DStack * initStack(){
	S=(DStack *)malloc(sizeof(DStack));
	S->capacity=MAXSIZE;
	S->top1=-1;
	S->top2=MAXSIZE;
	return S;
}

int isEmpty(DStack * S){
	return S->top1==-1&&S->top2==MAXSIZE;
	
}

int isFull(DStack *S){
	return S->top1==S->top2-1;
}

int Push1(DStack * S,int data){
	if(isFull(S)){
		return -1;
	} 
	S->top1++;
	S->data[S->top1]=data;
	return 1;
}
int Push2(DStack * S,int data){
	if(isFull(S)){
		return -1;
	}
	S->top2--;
	S->data[S->top2]=data;
	return 1;
}


int Pop1(DStack * S){
	if(isEmpty(S)){
		return -1;
	}
	int x=S->data[S->top1];
	S->top1--;
	return x;
}

int Pop2(DStack * S){
	if(isEmpty(S)){
		return -1;
	}
	int x=S->data[S->top2];
	S->top2++;
	return x;
}

int GetTop1(DStack * S){
	if(isEmpty(S)){
		return -1;
	}
	return S->data[S->top1];
}

int GetTop2(DStack * S){
	if(isEmpty(S)){
		return -1;
	}
	return S->data[S->top2];
}

int main(){
	S=initStack();
	Push1(S,1);
	cout<<GetTop1(S)<<endl;
	cout<<isEmpty(S)<<endl;
}

1.2.3 链栈

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
    int data;
    node * next;
}LinkStack;

LinkStack * top;

LinkStack * initLinkStack(){
	top=(LinkStack *)malloc(sizeof(LinkStack));
	top->next=NULL;
	return top;
}


void Push(LinkStack * top,int data){
	LinkStack * p=(LinkStack *)malloc(sizeof(LinkStack));
	p->data=data;
	p->next=top->next;
	top->next=p;
}


int Pop(LinkStack * top){
	int data=top->next->data;
	LinkStack * p=top->next;
	top->next=top->next->next;
	free(p);
	return data;
}


int main(){
	top=initLinkStack();
	Push(top,1);
	cout<<Pop(top)<<endl;
	return 0;
}

1.2.4 多链栈

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
    int data;
    node * next;
}LinkStack;

LinkStack * top[MAXSIZE];

LinkStack * initLinkStack(){
	for(int i=0;i<MAXSIZE;i++){
		top[i]=(LinkStack *)malloc(sizeof(LinkStack));
		top[i]->next=NULL;
	}
    return top[MAXSIZE];
}


void Push(LinkStack * top,int data,int i){
	LinkStack * p=(LinkStack *)malloc(sizeof(LinkStack));
	p->data=data;
	p->next=top[i]->next;
	top[i]->next=p;
}


int Pop(LinkStack * top,int i){
	int data=top[i]->next->data;
	LinkStack * p=top[i];
	top[i]->next=top[i]->next->next;
	free(p);
	return data;
}

1.3 队列

1.3.1 顺序循环队列

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
	int data[MAXSIZE];
	int front;
	int rear; 
}SeqQueue;

SeqQueue * Q;

SeqQueue * initSeqQueue(){
	Q=(SeqQueue *)malloc(sizeof(SeqQueue));
	Q->front=0;
	Q->rear=0; 
}


int isEmpty(SeqQueue * Q){
	return Q->front==Q->rear;
}

int isFull(SeqQueue * Q){
	return (Q->rear+1)%MAXSIZE==Q->front;
}

int EnterQueue(SeqQueue *Q,int data){
	if(isFull(Q)){
		return -1;
	}
	else{
		Q->data[Q->rear]=data;
		Q->rear++;
	}
	return 1;
}

int DeleteQueue(SeqQueue * Q){
	if(isEmpty(Q)){
		return -1;
	}
	else{
	    int data=Q->data[Q->front];
	    Q->front++;
	    return data;
	}
}

int main(){
	Q=initSeqQueue();
	EnterQueue(Q,2);
	EnterQueue(Q,1);
	cout<<DeleteQueue(Q)<<endl;
}

1.3.2 链式队列

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct node{
	int data;
	node * next;
}SeqQueueNode;

typedef struct{
	SeqQueueNode * front;
	SeqQueueNode * rear;
	int length;
}SeqQueue;


SeqQueue * Q;

SeqQueue * initSeqQueue(){
	Q=(SeqQueue *)malloc(sizeof(SeqQueue));
	Q->front=(SeqQueueNode * )malloc(sizeof(SeqQueueNode));
	Q->rear=(SeqQueueNode * )malloc(sizeof(SeqQueueNode));
	Q->front->next=NULL;
	Q->rear->next=NULL; 
	Q->length=0;
}


int isEmpty(SeqQueue * Q){
	return 	Q->length==0;
}


int EnterQueue(SeqQueue *Q,int data){
	SeqQueueNode* p=(SeqQueueNode *)malloc(sizeof(SeqQueueNode));
	p->data=data;
	if(Q->length==0){
		Q->front->next=p;
	}
	Q->rear->next=p;
	Q->length++;
	return 1;
}

int DeleteQueue(SeqQueue * Q){
	if(isEmpty(Q)){
		return -1;
	}
	if(Q->length==1){
		int data=Q->front->next->data;
		SeqQueueNode * p=Q->front->next;
		Q->front->next=Q->rear->next=NULL;
		Q->length--; 
		free(p);
		return data;
	}
	else{
		int data=Q->front->next->data;
		Q->front->next=Q->front->next->next;
		Q->length--; 
		return data;
		 
	}
}

int main(){
	Q=initSeqQueue();
	EnterQueue(Q,2);
	EnterQueue(Q,1);
	cout<<DeleteQueue(Q)<<endl;
}

1.4 树

1.4.1 二叉树

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;

typedef struct Node{
	char data;
	Node * Lchild;
	Node * Rchild;
}BiTree;


BiTree * T;

void PreOrder(BiTree * T){
	if(T!=NULL){
		cout<<T->data;
		PreOrder(T->Lchild);
		PreOrder(T->Rchild); 
	}
}


void PostOrder(BiTree * T){
	if(T!=NULL){
		PostOrder(T->Lchild);
		PostOrder(T->Rchild); 
		cout<<T->data;
	
	}
}


void InOrder(BiTree * T){
	if(T!=NULL){
		InOrder(T->Lchild);
		cout<<T->data;
	    InOrder(T->Rchild); 
	}
}

BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Rchild=PreCreateTree();
        return tree;
    }
}


int PostTreeDepth(BiTree * T){
	int hr,hl,max;
	if(T!=NULL){
	
	hl=PostTreeDepth(T->Lchild);
	hr=PostTreeDepth(T->Rchild);
	return hr>hl?hr+1:hl+1;
} 
else{
	return 0;
}
}


int main(){
	T=PreCreateTree();
	int h=PostTreeDepth(T);
	cout<<h;
} 

补充:先序遍历等的非递归方法。
非递归的中序遍历:

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct Node{
	char data;
	Node * Lchild;
	Node * Rchild;
}BiTree;
BiTree * T;
typedef struct node{
    BiTree * data[MAXSIZE];
	int top;
	int capacity;	
	
}SeqStack;

SeqStack * S;

SeqStack * initStack(){
	S=(SeqStack *) malloc(sizeof(SeqStack));
	S->top=-1;
	S->capacity=MAXSIZE;
	return S;
}

int GetLength(SeqStack * S){
	return S->top+1;
}

int isFull(SeqStack *S){
	return S->top==S->capacity-1;
}
int isEmpty(SeqStack *S){
	return S->top==-1;
}

int Push(SeqStack *S,BiTree * data){
	if(isFull(S)){
		return -1;
	}
	S->top++; 
	S->data[S->top]=data;
	return 1;
}
BiTree * Pop(SeqStack * S){
	if(isEmpty(S)){
		return NULL;
	}
	BiTree* x=S->data[S->top];
	S->top--;
	return x;
}
BiTree * GetTop(SeqStack *S){
	if(isEmpty(S)){
		return -NULL;
	}
	return S->data[S->top];
}

BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Rchild=PreCreateTree();
        return tree;
    }
}
void Inorder(BiTree * T){
	S=initStack();
	BiTree *p=T;
	while(p!=NULL||!isEmpty(S)){
		if(p!=NULL){
		Push(S,p);
		p=p->Lchild;
	}
	    else{
	    	cout<<1; 
	    	p=Pop(S);
	    	cout<<p->data;
	    	p=p->Rchild;
		}
	}
}
int main(){
	T=PreCreateTree();
	Inorder(T);
} 

非递归的前序遍历:

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;


typedef struct Node{
	char data;
	Node * Lchild;
	Node * Rchild;
}BiTree;


BiTree * T;



typedef struct node{
    BiTree * data[MAXSIZE];
	int top;
	int capacity;	
	
}SeqStack;

SeqStack * S;

SeqStack * initStack(){
	S=(SeqStack *) malloc(sizeof(SeqStack));
	S->top=-1;
	S->capacity=MAXSIZE;
	return S;
}

int GetLength(SeqStack * S){
	return S->top+1;
}

int isFull(SeqStack *S){
	return S->top==S->capacity-1;
}
int isEmpty(SeqStack *S){
	return S->top==-1;
}

int Push(SeqStack *S,BiTree * data){
	if(isFull(S)){
		return -1;
	}
	S->top++; 
	S->data[S->top]=data;
	return 1;
}

BiTree * Pop(SeqStack * S){
	if(isEmpty(S)){
		return NULL;
	}
	BiTree* x=S->data[S->top];
	S->top--;
	return x;
}

BiTree * GetTop(SeqStack *S){
	if(isEmpty(S)){
		return -NULL;
	}
	return S->data[S->top];
}



BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Rchild=PreCreateTree();
        return tree;
    }
}


void Preorder(BiTree * T){
	S=initStack();
	BiTree *p=T;
	while(p!=NULL||!isEmpty(S)){
		if(p!=NULL){
		Push(S,p);
		cout<<p->data;
		p=p->Lchild;
	}
	 
	    else{

	    	p=Pop(S);
	    	
	    	p=p->Rchild;
		}
	}
}
int main(){
	T=PreCreateTree();
	Preorder(T);
} 

非递归的后续遍历

#include<iostream>
#include<cstdlib>
#define MAXSIZE 100
using namespace std;
typedef struct Node{
	char data;
	Node * Lchild;
	Node * Rchild;
}BiTree;
BiTree * T;
typedef struct node{
    BiTree * data[MAXSIZE];
	int top;
	int capacity;	
	
}SeqStack;

SeqStack * S;

SeqStack * initStack(){
	S=(SeqStack *) malloc(sizeof(SeqStack));
	S->top=-1;
	S->capacity=MAXSIZE;
	return S;
}

int GetLength(SeqStack * S){
	return S->top+1;
}

int isFull(SeqStack *S){
	return S->top==S->capacity-1;
}
int isEmpty(SeqStack *S){
	return S->top==-1;
}

int Push(SeqStack *S,BiTree * data){
	if(isFull(S)){
		return -1;
	}
	S->top++; 
	S->data[S->top]=data;
	return 1;
}

BiTree * Pop(SeqStack * S){
	if(isEmpty(S)){
		return NULL;
	}
	BiTree* x=S->data[S->top];
	S->top--;
	return x;
}

BiTree * GetTop(SeqStack *S){
	if(isEmpty(S)){
		return -NULL;
	}
	return S->data[S->top];
}

BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Rchild=PreCreateTree();
        return tree;
    }
}
void Postorder(BiTree * T){
	S=initStack();
	BiTree *p=T;
	BiTree *q=NULL;
	while(p!=NULL||!isEmpty(S)){
		if(p!=NULL){
		Push(S,p);
		p=p->Lchild;
	}
	    else{
	    	p=GetTop(S);
	    	if(p->Rchild==NULL||p->Rchild==q){
	    		cout<<p->data;
	    		q=p;
	    		p=Pop(S);
	    		p=NULL;
			}
			else{
	    	p=p->Rchild;
		}
	}
	}
}
int main(){
	T=PreCreateTree();
	Postorder(T);
} 

1.4.2 线索二叉树

中序线索二叉树:

#include<iostream>
#include<cstdlib>
using namespace std;

typedef struct Node{
	char data;
	Node * Lchild;
	int Ltag;
	Node * Rchild;
	int Rtag;
}BiTree;


BiTree * T;


BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Ltag=0;
        tree->Rchild=PreCreateTree();
        tree->Rtag=0;
        return tree;
    }
}

BiTree * pre;

void Inthread(BiTree *T){
	if(T!=NULL){
	Inthread(T->Lchild);
	if(T->Lchild==NULL){
		T->Ltag=1;
		T->Lchild=pre;
	}
	if(pre!=NULL&&pre->Rchild==NULL){
		pre->Rtag=1;
		pre->Rchild=T;
	}
	pre=T;
	Inthread(T->Rchild);
}
}

BiTree * Orderfirst(BiTree *T){
	BiTree *p=T;
	if(p!=NULL){
		while(p->Ltag==0){
			p=p->Lchild;
		}
	}
	return p;
}

BiTree* InNext(BiTree * p){
	if(p->Rtag==1){
	    return p->Rchild;	
	}
	else{
		BiTree * q=p->Rchild; 
		while(q->Ltag==0){
			q=q->Lchild;
		}
		return q;
	}
	
}

void Order(BiTree *T){
	BiTree *p=Orderfirst(T);
	while(p!=NULL){
		cout<<p->data;
		p=InNext(p);
	}
}


void InsertNodeR(BiTree * p,BiTree * q){
	if(p->Rtag==0){
		BiTree *k=p->Rchild;
		while(k->Ltag==0){
			k=k->Lchild;
		}
		q->Rtag=0;
		q->Rchild=p->Rchild;
		q->Ltag=1;
		q->Lchild=p;
		p->Rchild=r;
		k->Lchild=q;
	}
	else{
		p->Rtag=0;
		q->Rtag=1;
		q->Rchild=p->Rchild;
		p->Rchild=q;
		q->Ltag=1;
		q->Lchild=p;
	}
} 

int main(){
	T=PreCreateTree();
	pre=NULL;
	Inthread(T);
	Order(T); 
} 

类似的先序:

#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct Node{
	char data;
	Node * Lchild;
	int Ltag;
	Node * Rchild;
	int Rtag;
}BiTree;
BiTree * T;
BiTree * PreCreateTree(){
    char ch;
    scanf("%C",&ch);
    getchar();
    if(ch == '.')
        return NULL;
    else{
        BiTree * tree=(BiTree *)malloc(sizeof(BiTree));
        tree->data=ch;
        tree->Lchild=PreCreateTree();
        tree->Ltag=0;
        tree->Rchild=PreCreateTree();
        tree->Rtag=0;
        return tree;
    }
}
BiTree * pre;
void Prethread(BiTree *T){
	if(T!=NULL){
	if(T->Lchild==NULL){
		T->Ltag=1;
		T->Lchild=pre;
	}
	if(pre!=NULL&&pre->Rchild==NULL){
		pre->Rtag=1;
		pre->Rchild=T;
	}
	pre=T;
	Prethread(T->Lchild);
	Prethread(T->Rchild);
}
}
int main(){
	T=PreCreateTree();
	pre=NULL;
	Prethread(T);
} 

1.4.3 树

#include<iostream>
#include<cstdlib>
using namespace std;
#include<stack>
typedef struct Node{
	char data;
	Node * firstChild;
	Node * sibling;
}Tree;
Tree * T;
Tree * createTree(char * s){
	int childType=0;
	int top=-1;
	Tree * p,*q;
	Tree * T[100];
	for(int i=0;s[i]!='\0';i++){
		if(isalpha(s[i])){
			p=(Tree *)malloc(sizeof(Tree));
			p->data=s[i];
			p->firstChild=NULL;
			p->sibling=NULL;
			if(childType==1)
			{
				T[top]->firstChild=p;
			}
			if(childType==2){
				q=T[top]->firstChild;
				while(q->sibling!=NULL){
					q=q->sibling;
				}
				q->sibling=p;
			}
		}
		else if(s[i]=='('){
			top++;
			T[top]=p;
			childType=1;
		}
		else if(s[i]==','){
			childType=2;
		}
		else if(s[i]==')'){
			top--;
		}	
	}
	return T[0];
}
void PreOrder(Tree * T){
	if(T!=NULL){
		cout<<T->data;
		PreOrder(T->firstChild);
		PreOrder(T->sibling);
   }
}
void PostOrder(Tree * T){
	if(T!=NULL){
		PreOrder(T->firstChild);
		PreOrder(T->sibling);
		cout<<T->data;
   }
}
int main(){
	
    char str[100]="A(B(D,E,F),C(G))";	
	T=createTree(str);
	PostOrder(T);
}

1.5 图

1.5.1 邻接矩阵

#include<iostream>
#include<cstdlib>
using namespace std;
#define MaxVertexNum 100

typedef struct{
	char vexs[MaxVertexNum];
	int edge[MaxVertexNum][MaxVertexNum];
	int vexnum,edgenum;
}Graph;

Graph * G;

Graph * initGraph(){
	G=(Graph* )malloc(sizeof(Graph));
	G->vexnum=0;
	G->edgenum=0;
	return G;
}

Graph * createGraph(Graph * G){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>G->vexs[i];
	}
	getchar();
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>G->edge[i][j];
			if(G->edge[i][j]!=0){
				G->edgenum++;
			}
		}
	}
	G->vexnum=n;
	return G;
}
 
int main(){
	G=initGraph();
	G=createGraph(G);
	cout<<G->edgenum;
} 
 

1.5.2 邻接表

#include<iostream>
#include<cstdlib>
#define MaxVertexNum 100
//有向图 
using namespace std;
typedef struct Node{
	int adjvex;
	ArcNode * nextarc;
	int info;
}ArcNode;
typedef struct{
	char data;
	ArcNode * firstarc;
}VertexNode;
typedef struct{
	VertexNode vertex[MaxVertexNum];
	int vexnum,arcnum;	
}AdjList;
AdjList * G;
AdjList * initGraph(){
	G=(AdjList *)malloc(sizeof(AdjList));
	G->vexnum=0;
	G->arcnum=0;
	return G;
}
AdjList * createGraph(AdjList * G){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>G->vertex[i];
	}
	cin>>n;
	int weight;
	for(int i=0;i<n;i++){
		cin>>a;
		cin>>b;
		cin>>weight;
		int locationa=Locate(G,a);
		int locationb=Locate(G,b);
		if(Locationa!=-1&&Locationb!=-1){
			ArcNode *p=G->vertex[Locationa]->firstarc;
			ArcNode *q=NULL;
			while(p!=NULL){
				q=p;
				p=p->nextarc;
			}
			ArcNode*  node=(ArcNode*)malloc(sizeof(ArcNode));
			q->nextarc=node;
			node- >adjvex=locationb;
			node->info=weight;
			G->arcnum++;
		}
	}
	G->vexnum=n;
	return G;
} 
int Locate(AdjList *G,char vex){
	for(int i=0;i<G->vexnum;i++){
	    if(G->vertex[i]->data==vex){
	    	return i;
		}	
	}
	return -1;
}
int main(){
	G=initGraph();
	return 0;	
}

1.5.3 图的一些其他算法

深度优先遍历



void DepthFirstSearch(AdjMGraph *G){
	int * visited=new int[MaxVertexnum];
	for(int i=0;i<G->Nv;i++){
		visited[i]=-1;
	} 
	s.push(1);
	while(!s.empty()){
		int temp=s.top();
		s.pop();
		if(!visited[temp]){
			visited[temp]=1;
			cout<<temp;
		}	
		EdgeNode *q =G->List[temp].firstVertnex;
		while(q!=NULL){
			int w=q->local;
			if(!visited[w]){
				s.push(w);
			}
			q=q->next;
		}
	}	
}

宽度优先遍历

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
16进制10进制.txt 32.txt asm.txt Crctable.txt C标志符命名源程序.txt erre.txt erre2.txt ff.txt for循环的.txt list.log N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt 万年历.txt 万年历的算法 .txt 乘方函数桃子猴.txt 乘法矩阵.txt 二分查找1.txt 二分查找2.txt 二叉排序树.txt 二叉树.txt 二叉树实例.txt 二进制数.txt 二进制数2.txt 余弦曲线.txt 余弦直线.txt 傻瓜递归.txt 冒泡排序.txt 冒泡法改进.txt 动态计算网络最长最短路线.txt 十五人排序.txt 单循环链表.txt 单词倒转.txt 单链表.txt 单链表1.txt 单链表2.txt 单链表倒序.txt 单链表的处理全集.txt 双链表正排序.txt 反出字符.txt 叠代整除.txt 各种排序法.txt 哈夫曼算法.txt 哈慢树.txt 四分砝码.txt 四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串.txt 实例1.txt 实例2.txt 实例3.txt 小写数字转换成大写数字1.txt 小写数字转换成大写数字2.txt 小写数字转换成大写数字3.txt 小字库DIY-.txt 小字库DIY.txt 小孩分糖果.txt 小明买书.txt 小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt 数据结构3.txt 数组完全单元.txt 数组操作.txt 数组递归退出.txt 数组递归退出2.txt 文件加密.txt 文件复制.txt 文件连接.txt 无向图.txt 时间陷阱.txt 杨辉三角形.txt 栈单元加.txt 栈操作.txt 桃子猴.txt 桶排序.txt 检出错误.txt 检测鼠标.txt 汉字字模.txt 汉诺塔.txt 汉诺塔2.txt 灯塔问题.txt 猴子和桃.txt 百鸡百钱.txt 矩阵乘法动态规划.txt 矩阵转换.txt 硬币分法.txt 神经元模型.txt 穷举搜索法.txt 符号图形.txt 简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋数组2.txt 试题.txt 诺汉塔画图版.txt 读写文本文件.txt 货郎担分枝限界图形演示.txt 货郎担限界算法.txt 质因子.txt 输出自已.txt 迷宫.txt 迷宫问题.txt 逆波兰计算器.txt 逆矩阵.txt 逆阵.txt 递堆法.txt 递归桃猴.txt 递归车厢.txt 递推.txt 逻辑移动.txt 链串.txt 链栈.txt 链表十五人排序.txt 链表(递归).txt 链队列.txt 队列.txt 阶乘递归.txt 阿姆斯特朗数.txt 非递归.txt 顺序栈.txt 顺序表.txt 顺序队列.txt 骑士遍历1.txt 骑士遍历2.txt 骑士遍历回逆.txt 黑白.txt
1.1 数组和字符串 2 1.1.1 一维数组的倒置 2 范例1-1 一维数组的倒置 2 ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的表示 14 范例1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组表示 17 范例1-7 多项式数组的表示 17 1.1.8 查找矩阵的马鞍点 19 范例1-8 查找矩阵的马鞍点 19 ∷相关函数:Get_Saddle函数 1.1.9 对角矩阵建立 21 范例1-9 对角矩阵建立 21 ∷相关函数:Store函数 1.1.10 三对角矩阵的建立 22 范例1-10 三对角矩阵的建立 22 ∷相关函数:Store函数 1.1.11 三角矩阵建立 24 范例1-11 三角矩阵建立 24 ∷相关函数:Store函数 1.1.12 对称矩阵的建立 25 范例1-12 对称矩阵的建立 25 ∷相关函数:store函数 1.1.13 字符串长度的计算 28 范例1-13 字符串长度的计算 28 ∷相关函数:strlen函数 1.1.14 字符串的复制 29 范例1-14 字符串的复制 29 ∷相关函数:strcpy函数 1.1.15 字符串的替换 31 范例1-15 字符串的替换 31 ∷相关函数:strrep函数 1.1.16 字符串的删除 33 范例1-16 字符串的删除 33 ∷相关函数:strdel函数 1.1.17 字符串的比较 35 范例1-17 字符串的比较 35 ∷相关函数:strcmp函数 1.1.18 字符串的抽取 36 范例1-18 字符串的抽取 36 ∷相关函数:substr函数 1.1.19 字符串的分割 38 范例1-19 字符串的分割 38 ∷相关函数:partition函数 1.1.20 字符串的插入 40 范例1-20 字符串的插入 40 ∷相关函数:insert函数 1.1.21 字符串的匹配 42 范例1-21 字符串的匹配 42 ∷相关函数:nfind函数 1.1.22 字符串的合并 43 范例1-22 字符串的合并 43 ∷相关函数:catstr函数 1.1.23 文本编辑 45 范例1-23 文本编辑 45 ∷相关函数:StrAssign函数 1.2 栈和队列 54 1.2.1 用数组仿真堆栈 54 范例1-24 用数组仿真堆栈 54 ∷相关函数:push函数 pop函数 1.2.2 用链表仿真堆栈 57 范例1-25 用链表仿真堆栈 57 ∷相关函数:push函数 pop函数 1.2.3 顺序栈公用 59 范例1-26 顺序栈公用 59 ∷相关函数:push函数 pop函数 1.2.4 进制转换问题 61 范例1-27 进制转换问题 61 ∷相关函数:MultiBaseOutput函数 1.2.5 顺序队列操作 64 范例1-28 顺序队列操作 64 ∷相关函数:push函数 pop函数 1.2.6 循环队列 66 范例1-29 循环队列 66 ∷相关函数:EnQueue函数 DeQueue函数 1.2.7 链队列的入队、出队 69 范例1-30 链队列入队、出队 69 ∷相关函数:push函数 pop函数 1.2.8 舞伴问题 71 范例1-31 舞伴问题 71 ∷相关函数:EnQueue函数 DeQueue函数 DancePartner函数 1.3 链表 75 1.3.1 头插法建立单链表 75 范例1-32 头插法建立单链表 75 ∷相关函数:createlist函数 1.3.2 限制链表长度建立单链表 77 范例1-33 限制链表长度建立长单链表 77 ∷相关函数:createlist函数 1.3.3 尾插法建立单链表 79 范例1-34 尾插法建立单链表 79 ∷相关函数:createlist函数 1.3.4 按序号查找单链表 80 范例1-35 按序号查找单链表 80 ∷相关函数:getnode函数 1.3.5 按值查找单链表 82 范例1-36 按值查找单链表 82 ∷相关函数:locatenode函数 1.3.6 链表的插入 84 范例1-37 链表的插入 84 ∷相关函数:insertnode函数 1.3.7 链表的删除 86 范例1-38 链表的删除 86 ∷相关函数:deletelist函数 1.3.8 归并两个单链表 88 范例1-39 归并两个单链表 88 ∷相关函数:concatenate函数 1.3.9 动态堆栈 90 范例1-40 动态堆栈 90 ∷相关函数:push函数 Pop函数 1.3.10 动态队列 93 范例1-41 动态队列 93 ∷相关函数:Enqueue函数 1.3.11 初始化单循环链表 95 范例1-42 初始化单循环链表 95 ∷相关函数:ListLength_CL函数 1.3.12 查询元素的前驱和后继 98 范例1-43 查询元素的前驱和后继 98 ∷相关函数:PriorElem_CL函数 NextElem_CL函数 1.3.13 单循环链表元素的删除 101 范例1-44 单循环链表元素的删除 101 ∷相关函数:ListDelete_CL函数 1.3.14 单循环链表的清除和销毁 107 范例1-45 单循环链表的清除和销毁 107 ∷相关函数:DestroyList函数 1.3.15 仅设表尾指针循环链表的合并 110 范例1-46 仅设表尾指针循环链表的合并 110 ∷相关函数:MergeList_CL函数 1.3.16 正序输出双向链表 113 范例1-47 正序输出双向链表 113 ∷相关函数:ListInsert函数 ListTraverse函数 1.3.17 逆向输出双向链表 116 范例1-48 三角矩阵建立 116 ∷相关函数:ListTraverseBack函数 1.3.18 删除双向链表的节点 121 范例1-49 删除双向链表的节点 121 ∷相关函数:ListDelete函数 1.3.19 双向链表的元素个数 124 范例1-50 双向链表的元素个数 124 ∷相关函数:ListLength函数 1.3.20 判断双向链表是否为空 126 范例1-51 判断双向链表是否为空 126 ∷相关函数:ListEmpty函数 1.3.21 双向链表元素值的查询 129 范例1-52 双向链表元素值的查询 129 ∷相关函数:GetElemP函数 1.3.22 稀疏矩阵的建立 136 范例1-53 稀疏矩阵的建立 136 ∷相关函数:Create函数 1.3.23 稀疏矩阵的删除 138 范例1-54 稀疏矩阵的删除 138 ∷相关函数:erase函数 1.4 树和二叉树 141 1.4.1 获得二叉树的深度和根(顺序结构) 141 范例1-55 获得二叉树的深度和根 141 ∷相关函数:BiTreeDepth函数 Root函数 1.4.2 获得二叉树的深度和根(链表结构) 144 范例1-56 获得二叉树的深度和根 144 ∷相关函数:BiTreeDepth函数 Root函数 1.4.3 树的插入(顺序结构) 147 范例1-57 树的插入 147 ∷相关函数:InsertChild函数 1.4.4 节点的修改(顺序结构) 150 范例1-58 节点的修改 150 ∷相关函数:Assign函数 1.4.5 节点的修改(链式结构) 154 范例1-59 节点的修改 154 ∷相关函数:Assign函数 1.4.6 双亲、孩子和兄弟节点的查询(顺序结构) 158 范例1-60 双亲、孩子和兄弟节点的查询 158 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.8 序遍历二叉树(顺序结构) 169 范例1-62 序遍历二叉树 169 ∷相关函数:InOrderTraverse函数 1.4.9 序遍历二叉树(链式结构) 171 范例1-63 序遍历二叉树 171 ∷相关函数:InOrderTraverse函数 1.4.10 序非递归遍历二叉树(链式结构)(1) 174 范例1-64 序非递归遍历二叉树 174 ∷相关函数:InOrderTraverse函数 1.4.11 序非递归遍历二叉树(链式结构)(2) 177 范例1-65 序非递归遍历二叉树 177 ∷相关函数:InOrderTraverse2函数 1.4.12 后序遍历二叉树(顺序结构) 180 范例1-66 后序遍历二叉树 180 ∷相关函数:PostOrderTraverse函数 1.4.13 后序遍历二叉树(链式结构) 183 范例1-67 后序遍历二叉树 183 ∷相关函数:PostOrderTraverse函数 1.4.14 层次遍历二叉树(顺序结构) 186 范例1-68 层次遍历二叉树 186 ∷相关函数:LevelOrderTraverse函数 1.4.15 层次遍历二叉树(链式结构) 188 范例1-68 层次遍历二叉树 188 ∷相关函数:LevelOrderTraverse函数 1.4.16 树的合并 191 范例1-70 树的合并 191 ∷相关函数:Find函数 Union函数 1.4.17 树的二叉链表存储的基本操作 193 范例1-71 树的二叉链表存储的基本操作 193 ∷相关函数:LevelOrderTraverse函数 1.4.18 二叉树的三叉链表存储的基本操作 201 范例1-72 二叉树的三叉链表存储表示 201 ∷相关函数:CreateBiTree函数 1.4.19 二叉树的二叉线索存储的基本操作 212 范例1-73 二叉树的二叉线索存储 212 ∷相关函数:CreateBiThrTree函数 1.4.20 树的双亲表存储的基本操作 215 范例1-74 树的双亲表存储的基本操作 215 ∷相关函数:CreateTree函数 1.4.21 哈夫曼编码(1) 223 范例1-75 哈夫曼编码(1) 223 ∷相关函数:HuffmanCoding函数 1.4.22 哈夫曼编码(2) 226 范例1-76 哈夫曼编码(2) 226 ∷相关函数:HuffmanCoding函数 1.5 排序 229 1.5.1 直接插入排序 229 范例1-77 直接插入排序 229 ∷相关函数:InsertSort函数 1.5.2 折半插入排序(顺序结构) 231 范例1-78 折半插入排序(顺序结构) 231 ∷相关函数:BInsertSort函数 1.5.3 2—路插入排序(顺序结构) 233 范例1-79 2—路插入排序(顺序结构) 233 ∷相关函数:P2_InsertSort函数 1.5.4 折半插入排序(链式结构) 235 范例1-80 折半插入排序(链式结构) 235 ∷相关函数:Arrange函数 1.5.5 2—路插入排序(链式结构) 238 范例1-81 2—路插入排序(链式结构) 238 ∷相关函数:Rearrange函数 1.5.6 希尔排序 241 范例1-82 希尔排序 241 ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 范例1-85 一趟快速排序的改进算法 248 ∷相关函数:QuickSort函数 1.5.10 简单选择排序 250 范例1-86 简单选择排序 250 ∷相关函数:SelectSort函数 1.5.11 箱子排序 252 范例1-87 箱子排序 252 ∷相关函数:sort函数 1.5.12 树型选择排序 254 范例1-88 树型选择排序 254 ∷相关函数:TreeSort函数 1.5.13 堆排序 256 范例1-89 堆排序 256 ∷相关函数:HeapSort函数 1.5.14 归并排序 258 范例1-90 归并排序 258 ∷相关函数:MergeSort函数 1.5.15 多路平衡归并排序 260 范例1-91 多路平衡归并排序 260 ∷相关函数:K_Merge函数 1.5.16 置换—选择排序 265 范例1-92 置换—选择排序 265 ∷相关函数:Replace_Selection函数 1.5.17 文件的归并 269 范例1-93 文件的归并 269 ∷相关函数:K_Merge函数 1.6 查找 272 1.6.1 顺序表的查找 273 范例1-94 顺序表的查找 273 ∷相关函数:Search_Seq函数 1.6.2 静态树表的查找 276 范例1-95 静态树表的查找 276 ∷相关函数:Search_SOSTree函数 1.6.3 二叉排序树的基本操作 280 范例1-96 二叉排序树的基本操作 280 ∷相关函数:InsertBST函数 1.6.4 平衡二叉树的基本操作 285 范例1-97 平衡二叉树的基本操作 285 ∷相关函数:SearchBST函数 1.6.5 B树的基本操作 290 范例1-98 B树的基本操作 290 ∷相关函数:SearchBTree函数 1.6.6 按关键字符串的遍历双链键树 295 范例1-99 按关键字符串遍历双链键树 295 ∷相关函数:SearchDLTree函数 1.6.7 按关键字符串的遍历Trie树 301 范例1-100 按关键字符串遍历Trie树 301 ∷相关函数:SearchTrie函数 1.6.8 哈希表的基本操作 306 范例1-101 哈希表的基本操作 306 ∷相关函数:SearchHash函数 1.7 图 311 1.7.1 图的邻接矩阵存储表示 311 范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-104 有向图的十字链表存储表示 335 ∷相关函数:CreateDG函数 1.7.4 无向图的邻接多重表存储表示 344 范例1-105 无向图的邻接多重表存储表示 344 ∷相关函数:CreateGraph函数 1.7.5 最小生成树 355 范例1-106 最小生成树 355 ∷相关函数:MiniSpanTree_PRIM函数 1.7.6 关节点和重连通分量 359 范例1-107 关节点和重连通分量 359 ∷相关函数:FindArticul函数 1.7.7 拓扑排序 366 范例1-108 拓扑排序 366 ∷相关函数:TopologicalSort函数 1.7.8 关键路径 374 范例1-109 关键路径 374 ∷相关函数:CriticalPath函数 1.7.9 最短路径 383 范例1-110 最短路径 383 ∷相关函数:ShortestPath_DIJ函数 1.7.10 每一对顶点之间的最短路径 387 范例1-111 每一对顶点之间的最短路径 387 ∷相关函数:ShortestPath_FLOYD函数
16进制10进制.txt 32.txt asm.txt Crctable.txt C标志符命名源程序.txt erre.txt erre2.txt ff.txt for循环的.txt list.log N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt 万年历.txt 万年历的算法 .txt 乘方函数桃子猴.txt 乘法矩阵.txt 二分查找1.txt 二分查找2.txt 二叉排序树.txt 二叉树.txt 二叉树实例.txt 二进制数.txt 二进制数2.txt 余弦曲线.txt 余弦直线.txt 傻瓜递归.txt 冒泡排序.txt 冒泡法改进.txt 动态计算网络最长最短路线.txt 十五人排序.txt 单循环链表.txt 单词倒转.txt 单链表.txt 单链表1.txt 单链表2.txt 单链表倒序.txt 单链表的处理全集.txt 双链表正排序.txt 反出字符.txt 叠代整除.txt 各种排序法.txt 哈夫曼算法.txt 哈慢树.txt 四分砝码.txt 四塔1.txt 四塔2.txt 回文.txt 图.txt 圆周率.txt 多位阶乘.txt 多位阶乘2.txt 大加数.txt 大小倍约.txt 大整数.txt 字符串查找.txt 字符编辑.txt 字符编辑技术(插入和删除) .txt 完数.txt 定长串.txt 实例1.txt 实例2.txt 实例3.txt 小写数字转换成大写数字1.txt 小写数字转换成大写数字2.txt 小写数字转换成大写数字3.txt 小字库DIY-.txt 小字库DIY.txt 小孩分糖果.txt 小明买书.txt 小白鼠钻迷宫.txt 带头结点双链循环线性表.txt 平方根.txt 建树和遍历.txt 建立链表1.txt 扫描码.txt 挽救软盘.txt 换位递归.txt 排序法.txt 推箱子.txt 数字移动.txt 数据结构.txt 数据结构2.txt 数据结构3.txt 数组完全单元.txt 数组操作.txt 数组递归退出.txt 数组递归退出2.txt 文件加密.txt 文件复制.txt 文件连接.txt 无向图.txt 时间陷阱.txt 杨辉三角形.txt 栈单元加.txt 栈操作.txt 桃子猴.txt 桶排序.txt 检出错误.txt 检测鼠标.txt 汉字字模.txt 汉诺塔.txt 汉诺塔2.txt 灯塔问题.txt 猴子和桃.txt 百鸡百钱.txt 矩阵乘法动态规划.txt 矩阵转换.txt 硬币分法.txt 神经元模型.txt 穷举搜索法.txt 符号图形.txt 简单数据库.txt 简单计算器.txt 简单逆阵.txt 线性顺序存储结构.txt 线索化二叉树.txt 绘制圆.txt 编随机数.txt 网络最短路径Dijkstra算法.txt 自我复制.txt 节点.txt 苹果分法.txt 螺旋数组1.txt 螺旋数组2.txt 试题.txt 诺汉塔画图版.txt 读写文本文件.txt 货郎担分枝限界图形演示.txt 货郎担限界算法.txt 质因子.txt 输出自已.txt 迷宫.txt 迷宫问题.txt 逆波兰计算器.txt 逆矩阵.txt 逆阵.txt 递堆法.txt 递归桃猴.txt 递归车厢.txt 递推.txt 逻辑移动.txt 链串.txt 链栈.txt 链表十五人排序.txt 链表(递归).txt 链队列.txt 队列.txt 阶乘递归.txt 阿姆斯特朗数.txt 非递归.txt 顺序栈.txt 顺序表.txt 顺序队列.txt 骑士遍历1.txt 骑士遍历2.txt 骑士遍历回逆.txt 黑白.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值