数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现
#include <iostream>
#include <cstdio>
using namespace std;
#define maxn 1000005
int a[maxn], temp[maxn];
long long ans;
void MergeSort(int a[], int l, int mid, int r)
{
int k=;
int i = l, n = mid, j = mid, m = r;
while ( i<n && j<m )
{
if (a[i] <= a[j])
{
temp[k++] = a[i++];
}
else
{
ans += n-i;
temp[k++] = a[j++];
}
}
while (i<n)
temp[k++] = a[i++];
while (j<m)
temp[k++] = a[j++];
for (int t = ; t<k; ++t)
a[l+t] = temp[t];
}
void Sort(int a[], int l, int r)
{
if (r-l<=)
return ;
int mid = (l+r)>>;
Sort(a, l, mid);
Sort(a, mid, r);
MergeSort(a, l, mid, r);
}
//快速排序
1 #include<iostream>
#include<cstdio>
#define MAXSIZE 100
using namespace std;
int partition(int a[],int low,int high)
{
int i,j;
int x;
x=a[low];
i=low;
j=high;
while(i<j)
{
while(i<j&&a[j]>=x) j--;
if(i<j) a[i++]=a[j];
while(i<j&&a[i]<=x) i++;
if(i<j) a[j--]=a[i];
}
a[i]=x;
return i;
}
void quicksort(int r[],int low ,int high)
{ int mid;
if(low<high)
{ mid = partition(r,low,high);
quicksort(r,low,mid-);
quicksort(r,mid+,high);
}
}
int main()
{ int R[MAXSIZE]={,,,,,,,,};
int len =;
quicksort(R,,len-);
for(int i=;i<len-;i++)
{ cout<<R[i]<<" ";
}
}
//最小生成树prim算法
#include<iostream>
#include<cstdio>
#define MAXSIZE 101
#define MAX 9999
using namespace std;
struct Graph{
int data[MAXSIZE][MAXSIZE];
int vexnum,arcnum;
};
int prim3(Graph G)
{
int min,i,j,pos;
int visited[MAXSIZE];
int low[MAXSIZE];
int result;
pos=;
visited[]=;
for(i=;i<=G.vexnum;i++)
{
visited[i]=;
if(i!=pos)
low[i]=G.data[pos][i];
}
for(i=;i<=G.vexnum;i++)
{
int min=MAX;
for(j=;j<=G.vexnum;j++)
{
if(visited[j]==&&min>low[j])
{
min=low[j];
pos=j;
}
}
result+=min;
visited[pos]=;
for(j=;j<=G.vexnum;j++)
{
if(visited[j]==&&low[j]>G.data[pos][j])
{
low[j]=G.data[pos][j];
}
}
}
return result;
}
1 ///链队列
struct LQueue
{
int data;
LQueue *next; }; struct Queue
{
LQueue *front,*rear;///队头队尾不存元素
};
int EnQueue(Queue *qu,int x)
{
LQueue *p;
p = (LQueue *)malloc(sizeof(LQueue));
if(!p) return ERROR;
else
{
p->data=x;
qu->rear->next = p;
qu->rear=p;
return OK;
} }
int OutQueue(Queue *qu)
{
LQueue *p;
if(qu->front==qu->rear)
{
return ERROR;
}
else
{
p=qu->front->next;
qu->front->next=p->next;
if(p->next==NULL)
{
qu->front=qu->rear;
}
free(p);
return OK;
}
}
//图的建立和遍历
#include<iostream>
#include<cstdio>
#include<cstdlib>
#define MAXSIZE 1000
#define MAX 100
#include<queue>
using namespace std;
bool visit[MAXSIZE]; struct AdjLink
{
int data;
AdjLink *next;
};
struct Graph
{
int vexNum,arcNum;
AdjLink *Head[MAXSIZE];
int kind; };
void DFS(Graph G,int i);
int FirstAdjLink(Graph G,int i);
int NextAdjLink(Graph G,int i,int w);
void BFSTraverse(Graph G);
void CreatGraph(Graph &G)
{
int Start,End;
AdjLink *p;
for(int i=;i<=G.vexNum;i++) G.Head[i]=NULL;
for(int i=;i<=G.arcNum;i++)
{
cout<<"请输入起点和终点:"<<endl;
cin>>Start>>End; p=(AdjLink*)malloc(sizeof(AdjLink));
p->next=G.Head[Start];
p->data=End;
G.Head[Start]=p; }
}
void DFSTraverse(Graph G)
{
for(int i=;i<=G.vexNum;i++) visit[i]=false;
for(int i=;i<=G.vexNum;i++)
if(!visit[i]) DFS(G,i);
cout<<"\b\b \n";
}
void DFS(Graph G,int i)
{
int w;
visit[i]=true;
cout<<i<<"->";
for(w=FirstAdjLink(G,i);w;w=NextAdjLink(G,i,w))
if(!visit[w])
DFS(G,w); }
int FirstAdjLink(Graph G,int i)
{
if(!G.Head[i]) return ;
else
{
return G.Head[i]->data;
}
}
int NextAdjLink(Graph G,int i,int w)
{
AdjLink *p;
p=G.Head[i];
while(p->data!=w) p=p->next;
if(p->next==NULL) return ;
else return p->next->data;
}
int main()
{
Graph G;
cout<<"请输入结点数和边数:"<<endl;
cin>>G.vexNum>>G.arcNum;
CreatGraph(G);
DFSTraverse(G);
BFSTraverse(G);
}
void BFSTraverse(Graph G)
{
queue<int> q;
for(int i=;i<=G.vexNum;i++) visit[i]=false;
for(int i=;i<=G.vexNum;i++)
{
if(!visit[i])
{
visit[i]=true;
cout<<i<<"->";
q.push(i);
while(!q.empty())
{
int u=q.front();
q.pop();
for(int w=FirstAdjLink(G,u);w;w=NextAdjLink(G,u,w))
{
if(!visit[w])
{
visit[w]=true;
cout<<w<<"->";
q.push(w);
}
}
}
} }
cout<<"\b\b \n";
}
//线性表
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
///都用c语言写的
///建议从主函数开始看
int sequence_map[]; ///顺序表的数组
int total_sequence=,total_list=; ///定义两个全局变量用来计算顺序表与链表长度,初始值为0
struct List ///当对顺序表和链表操作时对于相应长度值进行改变
{
int num;
List *next;
}; ///定义结构体表示链表中的各个元素
List *head=NULL,*p=NULL,*list_temp=NULL,*pback=NULL,*insert_temp=NULL;
void init_print() ///一级菜单操作界面
{
printf("* *\n");
printf("* 请输入对应序号进行操作 *\n");
printf("* 1.顺序表操作 *\n");
printf("* 2.链表操作 *\n");
printf("* 3.退出 *\n");
printf("**********************************\n");
printf("请输入对应序号进行操作:");
}
void init_sequence() ///二级菜单中顺序表的操作界面
{
printf("* *\n");
printf("* 请输入对应序号进行操作 *\n");
printf("* 1.顺序表的建立 *\n");
printf("* 2.顺序表的插入 *\n");
printf("* 3.顺序表的输出 *\n");
printf("* 4.顺序表的删除 *\n");
printf("* 5.顺序表的长度 *\n");
printf("* 6.返回上一层 *\n");
printf("**********************************\n");
printf("请输入对应序号进行操作:");
}
void init_pointlist() ///二级菜单中链表的操作界面
{
printf("* *\n");
printf("* 请输入对应序号进行操作 *\n");
printf("* 1.链表的建立 *\n");
printf("* 2.链表的插入 *\n");
printf("* 3.链表的输出 *\n");
printf("* 4.链表的删除 *\n");
printf("* 5.链表的长度 *\n");
printf("* 6.返回上一层 *\n");
printf("**********************************\n");
printf("请输入对应序号进行操作:");
}
void establish_sequence() ///建立顺序表
{
system("cls");
memset(sequence_map,,sizeof(sequence_map)); ///初始化数组为0
printf("请输入顺序表数据组数:");
int group;
scanf("%d",&group); ///首先输入数据的组数
total_sequence=group;
printf("请分别输入%d组数据,用空格或回车隔开:\n",group);
for(int i=; i<group; i++) ///在输入数据的同时进行排序
{
int sequence_temp;
bool flag=false; ///bool变量用来记录数据是否被插入当前数组
scanf("%d",&sequence_temp);
for(int j=; j<i; j++) ///在已经输入的数据中循环找是否有比当前元素大的元素
{
if(sequence_temp<sequence_map[j]) ///如果存在比当前值更大的元素
{ ///使bool变量变成true,表示数据被插入数组
flag=true;
for(int k=i-; k>=j; k--) ///把当前顺序表中比这个元素大的元素都后移一位
sequence_map[k+]=sequence_map[k];
sequence_map[j]=sequence_temp; ///将这个元素插入顺序表
break;
}
}
if(!flag) ///如果循环没有找到比当前元素大的元素
sequence_map[i]=sequence_temp; ///说明当前元素为最大值,直接加到数组最后一位
}
printf("创建顺序表成功!");
system("pause");
system("cls");
init_sequence();
}
void insert_sequence() ///插入数据和建立顺序表原理相同
{ ///可以优化成同一个程序
system("cls");
printf("请输入要插入的数据:");
int insert_temp;
bool flag=false;
scanf("%d",&insert_temp);
for(int i=; i<total_sequence; i++)
{
if(insert_temp<sequence_map[i])
{
flag=true;
for(int k=total_sequence-; k>=i; k--)
sequence_map[k+]=sequence_map[k];
sequence_map[i]=insert_temp;
break;
}
}
if(!flag)
sequence_map[total_sequence]=insert_temp;
total_sequence++;
printf("顺序表插入成功!");
system("pause");
system("cls");
init_sequence();
}
void output_sequence() ///遍历数组,输出所有元素
{
system("cls");
printf("顺序表当前为:\n");
for(int i=; i<total_sequence; i++)
{
printf("%d",sequence_map[i]);
printf(i==total_sequence-?"\n":" ");
}
system("pause");
system("cls");
init_sequence();
}
void delete_sequence() ///删除数据和插入原理相似,需要注意如果存在相同元素需要全部删除
{
system("cls");
printf("请输入要删除的数据:");
int delete_temp;
bool flag=false; ///判断顺序表中是否有当前元素
while(~scanf("%d",&delete_temp))
{
for(int i=; i<total_sequence; i++)
{
if(delete_temp==sequence_map[i])
{
total_sequence--; ///如果遇到需要删除的元素,将线性表长度-1
flag=true; ///表示已经删除该元素
for(int k=i; k<=total_sequence-; k++) ///从这一位开始将后面所有比它大的元素都前移一位
sequence_map[k]=sequence_map[k+];
i--; ///重点:如果不将i-1,会导致删除完本元素后i向后前进一位
} ///数组元素整体向前前进一位,相当于i+=2,如果此时有相同
} ///需要删除的元素,会跳过这个元素,导致删除不成功,有兴趣
if(!flag) ///可以注释掉i--这一句测试一些数据
{
printf("当前顺序表中无此元素,请重新输入:");
continue; ///如果flag值没有发生变化说明顺序表中没有这个元素
}
else
{
printf("顺序表元素删除成功!");
system("pause");
system("cls");
init_sequence(); ///否则删除成功,重新回到上级菜单
break;
}
}
}
void length_sequence()
{
system("cls");
printf("当前顺序表长度为:");
printf("%d\n",total_sequence); ///由于用了全局变量统计了顺序表的长度,就不用遍历了
system("pause");
system("cls");
init_sequence();
}
void establish_pointlist() ///链表的建立
{
system("cls");
printf("请输入链表数据组数:");
int list_group;
scanf("%d",&list_group);
printf("请分别输入%d组数据,用空格或回车隔开:\n",list_group);
for(int i=; i<list_group; i++)
{
total_list++;
list_temp=new List; ///动态申请新的内存空间
scanf("%d",&list_temp->num);
list_temp->next=NULL;
if(i==) ///第一个插入的元素连接到头指针后
head=list_temp;
else ///其余元素找到其应在的位置后插入
{
p=head; ///首先让p指针指向头指针
while(p->next!=NULL&&list_temp->num > p->num) ///当p不为空并且输入的值大于p指向的元素的值时
{
pback=p; ///使pback=p,p指向下一个元素
p=p->next; ///pback永远都表示p当前元素的前一个元素
}
if(list_temp->num <= p->num) ///当输入的值小于等于p指向的值时
{
if(p==head) ///如果此时p为头指针,即当前值为链表中的最小值
head=list_temp; ///所以temp值应该插入链表头部
else pback->next=list_temp; ///否则将需要插入的元素的地址存在pback->next中
list_temp->next=p; ///将p指向的元素地址存在temp->next中
} ///实现了向有序链表中插入元素
else
{
p->next=list_temp; ///此时链表中没有比当前元素大的值,说明当前元素为最大值
list_temp->next=NULL; ///将其插入链表最后即可
}
}
}
printf("链表创建成功!");
system("pause");
system("cls");
init_pointlist();
}
void insert_pointlist() ///插入元素和创建链表过程一样
{
total_list++;
system("cls");
printf("请输入要插入的数据:");
p=NULL,pback=NULL;
insert_temp=new List;
scanf("%d",&insert_temp->num);
insert_temp->next=NULL;
p=head;
pback=head;
while(p->next!=NULL&&insert_temp->num > p->num)
{
pback=p;
p=p->next;
}
if(insert_temp->num <= p->num)
{
if(p==head)
head=insert_temp;
else pback->next=insert_temp;
insert_temp->next=p;
}
else
{
p->next=insert_temp;
insert_temp->next=NULL;
}
printf("链表插入成功!");
system("pause");
system("cls");
init_pointlist();
}
void output_pointlist()
{
system("cls");
printf("当前链表元素为:\n");
p=head;
while(p!=NULL) ///利用指针p输出链表中的各个元素
{
printf("%d ",p->num);
p=p->next;
}
printf("\n");
system("pause");
return;
}
void delete_pointlist() ///删除链表中的元素
{
system("cls");
if(head==NULL) ///如果头指针为空,说明链表未创建
{
printf("尚未创建链表!");
system("pause");
return;
}
printf("请输入要删除的数据:");
int delete_temp;
while(~scanf("%d",&delete_temp))
{
p=head;
pback=head;
while(p->next!=NULL&&delete_temp!=p->num) ///指针p和pback移动,使p指向需要删除的位置
{ ///pback指向p的前一元素
pback=p;
p=p->next;
}
if(delete_temp == p->num) ///如果此时p的值与需要删除的值相同
{
while(delete_temp==p->num) ///由于要删除全部相同元素,要用循环
{
total_list--; ///每删除一次使链表长度-1
if(p==head) ///如果当前p为头指针,说明需要删除的是最小元素
head=p->next; ///使头指针指向p的下一元素即可
else pback->next=p->next; ///否则说明删除元素在链表中,直接使下一元素和上一元素相连
List *p_temp=p; ///保存下此时需要删除的地址
delete p_temp; ///释放内存
p=p->next; ///p继续移动,找下一个需要删除的元素
}
printf("链表元素删除成功!");
system("pause");
system("cls");
init_pointlist();
break;
}
else
{
printf("当前链表中无此元素,请重新输入:"); ///如果p->next指向NULL时仍没有元素可以删除
continue; ///说明此链表中无此元素
}
}
}
void length_pointlist() ///链表的长度,原理和线性表长度相同
{
system("cls");
printf("当前链表长度为:");
printf("%d\n",total_list);
system("pause");
system("cls");
init_sequence();
}
void sequence()
{
system("cls");
init_sequence();
int op_sequence; ///二级菜单中线性表的操作选项
while(~scanf("%d",&op_sequence))
{
if(op_sequence==)
establish_sequence();
else if(op_sequence==)
insert_sequence();
else if(op_sequence==)
output_sequence();
else if(op_sequence==)
delete_sequence();
else if(op_sequence==)
length_sequence();
else if(op_sequence==)
return;
else
{
printf("输入非法,请重新输入:");
continue;
}
}
}
void pointlist()
{
system("cls");
init_pointlist();
int op_pointlist; ///二级菜单中链表的操作选项
while(~scanf("%d",&op_pointlist))
{
if(op_pointlist==)
establish_pointlist();
else if(op_pointlist==)
insert_pointlist();
else if(op_pointlist==)
{
output_pointlist();
system("cls");
init_pointlist();
}
else if(op_pointlist==)
{
delete_pointlist();
system("cls");
init_pointlist();
}
else if(op_pointlist==)
length_pointlist();
else if(op_pointlist==)
return;
else
{
printf("输入非法,请重新输入:");
continue;
}
}
}
int main()
{
init_print(); ///初始化的菜单界面
int init_op; ///一级菜单的操作选项,1为顺序表,2为链表,3为退出
while(~scanf("%d",&init_op))
{
if(init_op==)
{
sequence(); ///当输入值为1时调用sequence函数进行顺序表操作
system("cls");
init_print();
}
else if(init_op==)
{
pointlist(); ///当输入值为2时调用pointlist函数进行链表操作
system("cls");
init_print();
}
else if(init_op==) ///当输入值为3时退出程序
exit();
else ///其余情况输入非法操作,继续重新输入
{
printf("输入非法,请重新输入:");
continue;
}
}
}
//栈 更改一下主函数就可用 lz这里是倒栈输出,便于观察进制的转换
#include<iostream>
#include<cstdio>
#include<malloc.h>
#define MAXSIZE 1000
#define NEW 10
using namespace std;
struct Stack
{
int *base;
int *top;
int length;
};
void InitStack(Stack &s)
{
s.base = (int *)malloc(NEW *sizeof(int));
if(!s.base)
{
cout<<"动态申请内存失败!!!"<<endl;
}
else
{
s.top = s.base;
s.length = NEW;
}
}
void Push(Stack &s,int e)
{
if(s.top-s.base>=s.length)
{
s.base=(int *)realloc(s.base,(s.length+NEW)*sizeof(int));
if(!s.base) cout<<"动态申请内存失败!!!"<<endl;
else
{
s.length+=NEW;
s.top = s.base+s.length;
}
} *s.top++=e;
}
void DisplayStack(Stack s)
{
int *p;
p = s.top-;
if(s.base ==s.top)
cout<<"当前栈为空栈!!!"<<endl;
else
{
cout<<"当前栈内元素为:";
while(p!=s.base-)
{
if(*(p)<)
{
cout<<*(p)<<" ";
p--;
}
else
{
cout<<char(*(p)+)<<" ";
p--;
}
}
cout<<endl;
}
}
int StackLength(Stack s)
{
int *p;
p=s.base;
int cont;
while(p!=s.top)
{
p++;
cont++;
}
return cont;
}
void pop(Stack &s)
{
if(s.top == s.base)
cout<<"当前已为空栈,操作失败!!!"<<endl;
else
{
*s.top--;
cout<<"操作成功!!!"<<endl;
}
}
void ClearStack(Stack &s)
{
s.top =s.base;
cout<<"栈已清空!!!"<<endl;
}
void StackEmpty(Stack s)///判空
{
if(s.top==s.base)
cout<<"栈为空!!!"<<endl;
else cout<<"栈不为空!!!"<<endl;
}
void DestroyStack(Stack &s)
{
s.base =NULL;
cout<<"栈已销毁!!!"<<endl;
}
void GetTop(Stack s,int &e)
{
if(s.top==s.base) cout<<"栈已为空,操作失败!!!"<<endl;
else
{
cout<<"栈顶元素为:";
e=*(s.top-);
cout<<e<<endl;
}
}
int main()
{
int x,r;
printf("请输入要转换的10进制数和要转的进制:\n");
while(cin>>x>>r)
{
Stack s;
InitStack(s);
while(x>)
{
Push(s,x%r);
x=x/r;
}
DisplayStack(s);
}
}
//串
#include<iostream>
#include<cstdio>
#include<string.h>
#include<malloc.h>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define FAlSE 0
#define OK 1
#define ERROR 0
#define OVERLOE -2
typedef int Status;
struct HString{
char *ch;
int length;
};
Status StrAssign(HString &H)
{
H.length = ;
H.ch = (char *)malloc((MAXSIZE)*sizeof(char));
printf("请输入字符串的长度\n");
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
H.ch[i] = getchar();
H.length++;
if(getchar()=='\0')
break;
}
return OK;
}
Status PrintHString(HString H)
{
if(H.length == )
cout<<"空串\n";
else
{
for(int i=;i<H.length;i++)
{
cout<<H.ch[i]<<" ";
}
cout<<endl;
}
return OK;
}
Status HStringLength(HString H)
{
printf("输入的字符串的长度为:\n");
cout<<H.length<<endl;
return OK;
}
Status HStringCompare(HString H,HString T)
{
for(int i=;i<H.length&&i<T.length;i++)
{
if(T.ch[i]!= H.ch[i]) return T.ch[i]-H.ch[i];
else return T.length - H.length;
}
}
Status HStringConcat(HString &S,HString H,HString T)
{
if(!(S.ch = (char *)malloc((H.length+T.length)*sizeof(char))))
exit(OVERLOE);
for(int i=;i<H.length;i++)
S.ch[i] = H.ch[i];
S.length = T.length+H.length;
for(int i=H.length;i<S.length;i++)
{
S.ch[i] = T.ch[i-H.length];
}
return OK;
}
Status SubHString(HString &Sub,HString S,int pos ,int len)
{
if(pos<||len<||pos+len>S.length)
{
cout<<"输入长度有误!\n";
}
else
{
Sub.ch = (char *)malloc(len*sizeof(char));
for(int i= ;i< len;i++)
Sub.ch[i] = S.ch[pos + i-];
Sub.length = len;
}
return OK;
}
///串的模式匹配
int Index(HString S,HString T,int pos)
{
HString Sub;
int i=;
if(pos>)
{
int n = S.length;
int m = T.length;
i = pos;
while(i<=n-m+)
{
SubHString(Sub,S,i,m);
if(HStringCompare(Sub,T)!= )
i++;
else return i;
}
return ;
}
}
///串的替换
Status Replace(HString &S,HString T,HString V)
{
int i=;
if(T.length == )
return ERROR;
while(i)
{
i = Index(S,T,i);
if(i)
{
for(;i<T.length;i++)
{
S.ch[i] = V.ch[i];
}
i+= V.length;
}
}
return OK;
}
//二叉树
#include<iostream>
#include<cstdio>
#include<cstring>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#define MAXSIZE 201
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
int len,i=-;
char *p;
char ch[MAXSIZE];
int CreatBiTree(BiTree &T)
{
if(!(*p)||*p==' ')
{
T=NULL;
p++;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data =*(p++);
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return ;
}
void Visit(char ch)
{
cout<<ch<<" ";
}
void PreOrderTraverse(BiTree T)///前序遍历
{
if(T)
{
Visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
Visit(T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
Visit(T->data);
}
}
void DestroyBiTree(BiTree T)
{
if(T)
{
if(T->lchild) DestroyBiTree(T->lchild);
if(T->rchild) DestroyBiTree(T->rchild);
free(T);
T=NULL;
}
}
int main()
{
int choice,flag=;
BiTree T;
printf("请输入要插入的字符串,空格表示字数为空:\n");
gets(ch);
p=ch;
CreatBiTree(T);
while(flag)
{
printf("请输入要操作程序的内容\n");
printf("1.递归先序遍历\n");
printf("2.递归中序遍历\n");
printf("3.递归后序遍历\n");
printf("4.退出\n");
scanf("%d",&choice);
if(choice == )
{
printf("先序遍历二叉树:\n");
PreOrderTraverse(T);
cout<<endl;
}
else if(choice == )
{
printf("中序遍历二叉树:\n");
InOrderTraverse(T);
cout<<endl;
}
else if(choice == )
{
printf("后序遍历二叉树\n");
PostOrderTraverse(T);
cout<<endl;
}
else
{
flag=;
printf("程序运行结束,按任意键退出!\n");
getch();
}
}
DestroyBiTree(T);
}
数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。的更多相关文章
- 基于c语言数据结构+严蔚敏——线性表章节源码,利用Codeblocks编译通过
白天没屌事,那我们就来玩玩线性表的实现吧,快要失业了,没饭吃了咋整哦 题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
- 最小生成树Prim算法(邻接矩阵和邻接表)
最小生成树,普利姆算法. 简述算法: 先初始化一棵只有一个顶点的树,以这一顶点开始,找到它的最小权值,将这条边上的令一个顶点添加到树中 再从这棵树中的所有顶点中找到一个最小权值(而且权值的另一顶点不属 ...
- 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)
目录 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...) Java书写规范 IDEA的一些常用快捷键 Java类中作为成员变量的类 Java源文件中只能有一个public类 Java中 ...
- 知道创宇爬虫题--代码持续更新中 - littlethunder的专栏 - 博客频道 - CSDN.NET
知道创宇爬虫题--代码持续更新中 - littlethunder的专栏 - 博客频道 - CSDN.NET undefined 公司介绍 - 数人科技 undefined
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- 数据结构C++版-线性表
PS:资料来源慕课网视频. 一.什么是线性表 线性表是n个数据元素的有限序列. 分类: 二.补充知识点 1.栈和队列有出操作.入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值 ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- 【C#数据结构系列】线性表
一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...
随机推荐
- postgresql查询的处理过程
本文简单描述了Postgresql服务器接收到查询后到返回给客户端结果之间一般操作顺序,总的流程图如下: 第一步: 客户端程序可以是任何符合 PostgreSQL 协议规范的程序,如 JDBC 驱动. ...
- 使用css让div半透明
设置div的背景为半透明,下面有个不错示例,使用div+css来实现下,不会的朋友可以参考下 div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity ...
- Responsive设计——不同设备的分辨率设置
下面我们一起来看看CSS3 Meida Queries在标准设备上的运用,大家可以把这些样式加到你的样式文件中,或者单独创建一个名为“responsive.css”文件,并在相应的条件中写上你的样式, ...
- sed tr 去除PATH中的重复项
最近发现由于自己不良的安装软件的习惯,shell的PATH路径包含了很多冗余的项.这里使用shell命令去除PATH的冗余项. export PATH=$(echo $PATH | sed 's/:/ ...
- sqlite简单使用
c创建表: create table 表名称(元素名称 类型,,,): 插入数据:insert into 表名称 values(null,,,) 修改数据 : update 表名 set 字段=’ ...
- Python3.4如何读写Excel
在python3.x(散仙使用的版本是python3.4)里,我们应该如何操作excel. 首先在python3.4里,我们可以使用新的python类库,来支持3.x之后的读写excel 针对 03版 ...
- PowerShell Start 1 - 使用Get - Help.
详细帮助命令参见:https://msdn.microsoft.com/zh-cn/powershell/scripting/getting-started/fundamental/getting-d ...
- [转]java二维码生成与解析代码实现
转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1. 高密度编码,信息容量大 可容纳多达1850个大 ...
- OC-02 如何设计类
1.确认类名 2.类的属性 3.功能行为 例子:类名:person 属性:height 行为:fight 例子:坦克发射3颗炮弹打中2架飞机 类:坦克.炮弹.飞机 把相同属性的对象抽象成一 ...
- eclipse中配置maven
http://jingyan.baidu.com/article/db55b609a994114ba20a2f56.html