原创 洛谷P1064金明的預算方案
題目傳送門 題目含義:總錢數m,物品總件數n。每個物品只能買一次,想要買附件必須買主件。求不超過總錢數的最大價值。 主件1與附件2、3、4的買法組合有:12、13、123、14、124、134、1234,可以把這些組合看作一個整體,每次從
原创 洛谷P1077擺花
題目傳送門 題目含義:每種花可以不擺,可以擺任意盆,但不能超過最大盆數。花的擺放順序按種類依次遞增,求擺花的方案數。 不同擺放方案主要依賴二維屬性的限制:一個是盆數,一個是種數。 所以狀態表示爲:f[i][j]是前i種花擺j盆的方案數。
原创 帶權路徑長度
int CalcWPL(BiTree T,int d){ static int wpl; if(!(T->lchild)&&!(T->rchild)){ wpl+=(T->weight)*d; } if(T->lchild)
原创 孩子兄弟鏈表
typedef struct CSTNode{ int data; struct CSTNode *firstchild,*nextsibling; }CSTNode,*CSTree; int height(CSTree T){
原创 二叉樹建樹與層次遍歷
typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T){
原创 插入選擇冒泡快排歸併希爾--排序算法
void InsertSort(ElemType A[],int n){ for(int i=2;i<=n;i++){ if(A[i]<A[i-1]){ A[0]=A[i]; for(int j=i-1;A[j]<A[
原创 排序、平衡、線索、哈夫曼的一些概念
二叉排序樹: 1.若左子樹非空,左子樹所有結點的值均小於根結點的值 2.若右子樹非空,右子樹所有結點的值均大於根結點的值 3.左右子樹都是一棵二叉排序樹平衡二叉樹: 二叉排序樹的平均查找長度主要取決於樹的高度 爲避免樹的高度增長過快,降低
原创 樹的題目(二)
int CalcWPL(BiTree T,int d){ static int wpl; if(T->lchild==NULL&&T->rchild==NULL){ wpl+=(T->weight)*d; } if(T->l
原创 鏈表題目(二)
//判斷B是否爲A的子序列 int Match(LinkList A,LinkList B){ LinkList p=A->next,q=B->next,r=A->next; while(p!=NULL&&q!=NULL){
原创 頭插法與尾插法
void CreateList_Head(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; LinkList s;int x; scanf("%d",&
原创 鏈表查找插入刪除
typedef struct LNode{ int data; struct LNode* next; }LNode,*LinkList; bool GetElem(LinkList L,int i,int &x){ LinkL
原创 順序表的一些操作
#define MaxSize 50 typedef struct{ int data[MaxSize]; int length; }SqList; //二分查找(有序表)非遞歸 int BinarySearch(SqList
原创 樹的題目(一)
//求葉子結點數 int leaves(BiTree T){ if(!T)return 0; if(T->lchild==NULL&&T->rchild==NULL)return 1; return leaves(T->lchil
原创 判斷排序樹和平衡樹
int predata=-32767; int JudgeBST(BiTree T){ int b1,b2; if(T==NULL)return 1; else{ b1=JudgeBST(T->lchild); if(b1
原创 鏈表與順序表對比
1.可以隨機存取元素(通過首地址和元素序號可以在O(1)的時間內找到指定元素) 只能順序存取元素(按序號訪問的平均時間複雜度爲O(n))2.插入、刪除操作需要移動大量的元素 插入、刪除操作不需要移動元素,只需要修改指針3.邏輯上相鄰的兩個