854之数据结构
一.线性表
1.顺序表
#include <iostream>
#include<stdlib.h>
using namespace std;
#define max 100
typedef struct
{int element[max];int last;
} List;
typedef int position ;
void Insert(int x, position p, List &L)
{position q;if (L.last >= max - 1)cout << 'full';else if (p > L.last + 1 || p < 1)cout << "error";else{for (q = L.last; q >= q; q--){L.element[q+1] = L.element[q];}L.element[p] = x;L.last++;}
}
void Delete(position p, List& L)
{position q;if (p > L.last + 1 || p < 1)cout << "error";else{L.last--;for (q = p; q <= L.last; q++)L.element[q] = L.element[q + 1];}}
position Locate(int x, List L)
{position q;for (q = 1; q <= L.last; q++)if (L.element[q] == x)return q;return -1;
}
int Retrieve(position p, List L)
{if (p > L.last || p < 1)cout << "error";else return L.element[p];
}
position Previous(position p, List L)
{if (p > L.last || p <= 1)cout << "error";else{return p-1;}
}
2.单链表
#include <iostream>
#include<stdlib.h>
using namespace std;typedef int ElemType;struct celltype
{ElemType data;celltype * next;
};//结点型
typedef celltype* List;
typedef celltype* position;
void Insert(ElemType x, position p, List& L)
{position q;q = new celltype;q->data = x;q->next = p->next;p->next = q;
}
void Delete(position p,List&L)
{ position q=NULL;if (p->next != NULL){q->next = p->next;p->next = q->next;delete q;}}
position Locate(ElemType x, List& L)
{position p;p = L;while (p->next != NULL){if (p->next->data == x)return p;elsep = p->next;}return p;
}
ElemType Retrieve(position p, List L)
{return p->next->data;
}position Previous(position p, List L)
{position q;if (p == L->next)cout << "error";else{q = L;while (q->next!=NULL){q = q->next;}return q;}
}
position Next(position p, List L)
{position q;if (p->next == NULL)cout << "error";else{q = p->next;return q;}
}
position MakeNull(List& L)
{ L = new celltype;L->next = NULL;return L;
}
position First(List L)
{return L;
}
position End(List L)
{position q;q = L;while (q->next != NULL)q = q->next;return q;
}
position Travel(List L)
{position q;q = L->next;while (q!=NULL){cout << q->data;q = q->next;}
}
int main()
{cout << "text";
}
3.线性表静态存储
#include <iostream>
#include<stdlib.h>
#define maxsize 12
using namespace std;
int avail;
typedef int ElemType;
typedef struct
{ ElemType data;int next;
}spacestr;
spacestr SPACE[maxsize];//储存池
typedef int position,Cursor;void Initialize()
{int j;for (j = 0; j < maxsize - 1; j++){SPACE[j].next = j + 1;}SPACE[maxsize].next = -1;avail = 0;
}
Cursor GetNode()
{Cursor p;if (SPACE[avail].next = -1)p = -1;else{p = SPACE[avail].next;SPACE[avail].next = SPACE[p].next;}return p;
}
void FreeNode(Cursor q)
{SPACE[q].next = SPACE[avail].next;SPACE[avail].next = q;
}
void Insert(ElemType x, position p, spacestr* SPACE)
{position q = GetNode();SPACE[q].data = x;SPACE[q].next = SPACE[p].next;SPACE[p].next = q;
}
void Delete(position p, spacestr* SPACE)
{position q;q = SPACE[p].next;SPACE[p].next = SPACE[q].next;FreeNode(q);
}int main()
{cout << "text";
}
4.双链表
#include <iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
struct dcelltype
{ElemType data;dcelltype* next,*prior;
};//结点型
typedef dcelltype* DList;
typedef dcelltype* position;void Insert(ElemType x, position p, DList& L)
{position s;s = new dcelltype;s->data = x;s->prior = p;s->next = p->next;p->next->prior = s;p->next = s;
}
void Delete(position p, DList& L)
{ //if(p->prior!=NULL) 不带头结点的情况下p->prior->next = p->next;//if(p->next!=NULL)p->next->prior = p->prior;delete(p);
}int main()
{cout << "text";
}
5.单向环形链表
#include <iostream>
#include<stdlib.h>
using namespace std;typedef int ElemType;struct celltype
{ElemType data;celltype* next;
};//结点型
typedef celltype* List;
typedef celltype* position;
void LInsert(ElemType x, List& L)
{celltype* p;p = new celltype;p->data = x;if (L == NULL){p->next = p;L = p;}else{p->next = L->next;L->next = p;}
}
void RLnsert(ElemType x, List& L)
{LInsert(x, L);L= L->next ;
}void Josephus(List& Js, int n, int m)
{celltype* p = Js, * pre = NULL;for (int i = 0; i < n - 1; i++){for (int j = 0; j < m - 1; j++){pre = p; p = p->next;}cout << "出列的人是" << p->data << endl;pre->next = p->next;delete p;p = pre->next;}
}
int main()
{cout << "text";
}
6.多项式的加法
#include <iostream>
#include<stdlib.h>
using namespace std;typedef int ElemType;
// p(x)=3*x^14+2*x^8+1多项式
struct polynode {int coef;//系数int exp;//指数polynode* link;
};
typedef polynode* polypointer;
polypointer Attch(int c, int e, polypointer& d)
{polypointer x;x = new polynode;x->coef = c;x->exp = e;d->link = x;return x;
}
polypointer PolyAdd(polypointer a, polypointer b)
{polypointer p, q, d, c;int y;p = a->link;q = b->link;c = new polynode;d = c;while (p!=NULL&&q!=NULL){if (p->exp == q->exp){y = p->coef + q->coef;if (y)d = Attch(y, p->exp, d);p = p->link;q = q->link;}else if (p->exp<q->exp){d = Attch(q->coef, q->exp, d);q = q->link;}else if (p->exp > q->exp){d = Attch(p->coef, p->exp, d);p = p->link;}}while (p!=NULL){d = Attch(p->coef, p->exp, d);p = p->link;}while (q != NULL){d = Attch(q->coef, q->exp, d);q = q->link;}
}
int main()
{cout << "text";
}
二.栈
1.顺序表栈
#include <iostream>
#include<stdlib.h>
#define max 10
using namespace std;typedef int ElemType;
typedef struct
{ElemType elemtype[max];int top;
}STACK;
STACK s;
void MakeNull(STACK& s)
{s.top = -1;}
bool Empty(STACK& s)
{ if (s.top < 0)return true;elsereturn false;
}
ElemType Top(STACK s)
{if (Empty(s))cout << "error";elsereturn s.elemtype[s.top];
}
void Pop(STACK &s)
{if (Empty(s))cout << "error";elses.top = s.top - 1;
}
void Push(ElemType x, STACK& s)
{if (s.top == -1)cout << 'full';else{s.top++;s.elemtype[s.top] = x;}
}
int main()
{cout << "text";
}
2.栈的链式表
#include <iostream>
#include<stdlib.h>
#define max 10
using namespace std;typedef int ElemType;
struct Node
{ElemType data;Node* next;
};
typedef Node* STACK;
STACK MakeNull()
{STACK s;s = new Node;s->next = NULL;return s;
}
bool Empty(STACK s)
{if (s->next)return false;elsereturn true;
}
void Push(ElemType x, STACK s)
{STACK st;st = new Node;st->data = x;st->next = s->next;s->next = st;
}
void Pop(STACK s)
{STACK st;if (Empty(s))cout << "error";else{st = s->next;s->next = st->next;delete st;}
}
ElemType Top(STACK s)
{if (s->next)return s->next->data;else{return -1;}
}
int main()
{cout << "text";
}
3.递归应用
#include <iostream>
#include<stdlib.h>
#define max 10
using namespace std;long fact(int n)//计算n!
{if (n == 1)return 1;else return n*fact(n - 1);
}
void Move(char a, char b)
{}
void Hanoi(int n, char a, char b, char c)
{if (n == 1) Move(a, c);else{Hanoi(n - 1, a, c, b);Move(a, c);Hanoi(n - 1, b,a,c);}
}
int main()
{cout << "text";
}
4.栈的应用
#include <iostream>
#include<stdlib.h>
#define max 10
using namespace std;typedef int ElemType;
struct Node
{ElemType data;Node* next;
};
typedef Node* STACK;
STACK MakeNull()
{STACK s;s = new Node;s->next = NULL;return s;
}
bool Empty(STACK s)
{if (s->next)return false;elsereturn true;
}
void Push(ElemType x, STACK s)
{STACK st;st = new Node;st->data = x;st->next = s->next;s->next = st;
}
void Pop(STACK s)
{STACK st;if (Empty(s))cout << "error";else{st = s->next;s->next = st->next;delete st;}
}
ElemType Top(STACK s)
{if (s->next)return s->next->data;else{return -1;}
}
void strol8()
{int n;STACK s;s = MakeNull();cin >> n;while (n){Push(n % 8, s);//输入十进制转为八进制n /= 8;}while (!Empty(s)){cout << Top(s);Pop(s);}
}void main()
{strol8();}
三.队列
1.链式队列
#include <iostream>
#include<stdlib.h>
#define max 10
using namespace std;typedef int ElemType;
struct celltype
{ElemType data;celltype* next;
};//结点型
struct QUEUE
{celltype* front;celltype* rear;
};
void MakeNull(QUEUE &Q)
{Q.front = new celltype;Q.front->next = NULL;Q.rear = Q.front;
}
bool Empty(QUEUE& Q)
{if (Q.rear == Q.front)return true;elsereturn false;
}
void EnQueue(ElemType x, QUEUE Q)
{celltype* q;q = new celltype;q->data = x;q->next = NULL;Q.rear->next = q;Q.rear = q;
}
void DeQueue(QUEUE& Q)
{celltype* q;if (Empty(Q))cout << "empty";q = Q.front->next;Q.front->next = q->next;if (q->next == NULL)Q.rear = Q.front;delete q;
}
ElemType Front(QUEUE& Q)
{if (Empty(Q))cout << "empty";elsereturn Q.front->next->data;
}void main()
{cout << 'test';}
2.循环数组队列
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef int ElemType;struct QUEUE
{ElemType data[maxlength];int front;int rear;
};
void MakeNull(QUEUE& Q)
{Q.front = 0;Q.rear = maxlength - 1;
}
int addone(int i)
{return ((i + 1)% maxlength);
}
bool Empty(QUEUE Q)
{if (addone(Q.rear) ==Q.front)return true;elsereturn false;
}
ElemType Front(QUEUE Q)
{if (Empty(Q))return NULL;elsereturn (Q.data[Q.front]);
}
void EnQueue(ElemType x, QUEUE& Q)
{if (addone(addone(Q.rear)) == Q.front)cout<<"error";else {Q.rear = addone(Q.rear);Q.data[Q.rear] = x;}
}
void DeQueue(QUEUE& Q)
{ if (Empty(Q))cout<<"error";elseQ.front = addone(Q.front);
}
void main()
{cout << 'test';}
串
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef int ElemType;int Index_BF(char* S, char* T, int post = 1)
{//S为主串,T为模式串;int i = post, j = 1;while (i<=S[0]&&j<=T[0]){if (S[i] == T[j]){i++;j++;}else{i = i - j + 2;j = 1;}}if (j > T[0])return i - T[0];elsereturn 0;
}
void main()
{cout << 'test';}
广义表
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef int ElemType;typedef struct
{int i, j;ElemType v;
}Triple;
typedef struct
{Triple data[maxlength + 1];int mu, nu, tu;
}TSMatirx;
//广义表
struct listnode
{listnode* link;bool tag;union {char data;listnode* dlink;}element;
};
typedef listnode* listpointer;bool Equal(listpointer S, listpointer T)
{bool x, y;y = false;if ((S == NULL) && (T == NULL))y = true;else if ((S != NULL) && (T != NULL))if (S->tag == T->tag){if (S->tag == false){if (S->element.data == T->element.data)x = true;elsex = false;}elsex = Equal(S->element.dlink, T->element.dlink);if (x == true)y = Equal(S->link, T->link);}return y;
}
void main()
{ // 创建广义表1: [a, [b, c]]listpointer cNode = new listnode;cNode->tag = false;cNode->element.data = 'c';cNode->link = NULL;listpointer bNode = new listnode;bNode->element.data = 'b';bNode->link = cNode;listpointer aNode = new listnode;aNode->tag = true;aNode->element.dlink = NULL;aNode->link = bNode;listpointer list1 = aNode;// 创建广义表2: [a, [b, c]]listpointer cNode2 = new listnode;cNode2->tag = false;cNode2->element.data = 'c';cNode2->link = NULL;listpointer bNode2 = new listnode;bNode2->tag = false;bNode2->element.data = 'b';bNode2->link = cNode2;listpointer aNode2 = new listnode;aNode2->tag = true;aNode2->element.dlink = NULL;aNode2->link = bNode2;listpointer list2 = aNode2;bool isEqual = Equal(list1, list2);if (isEqual)printf("广义表相等\n");elseprintf("广义表不相等\n");// 释放内存free(cNode);free(bNode);free(aNode);free(cNode2);free(bNode2);free(aNode2);}
二叉树
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;struct node
{ElemType data;node* Lchild;node* Rchild;
};
typedef node* BTREE;
void PreOrder(BTREE t)
{if (t == NULL)return;printf("%c", t->data);PreOrder(t->Lchild);PreOrder(t->Rchild);}
void InOrder(BTREE t)
{if (t == NULL)return;InOrder(t->Lchild);printf("%c", t->data);InOrder(t->Rchild);}
void PostOrder(BTREE t)
{if (t == NULL)return;PostOrder(t->Lchild);PostOrder(t->Rchild);printf("%c", t->data);}
BTREE create()
{BTREE t;char c = getchar();if (c == '#')return NULL;t = new node;t->data = c;t->Lchild = create();t->Rchild = create();return t;
}void main()
{ cout << "test";
}
用栈模拟二叉树遍历
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;struct node
{ElemType data;node* Lchild;node* Rchild;
};typedef node* BTREE;
typedef node* elemType;
struct stack
{elemType ptr;int flag;
};
stack st[maxlength];
struct Node
{elemType data;Node* next;
};
typedef Node* STACK;
STACK MakeNull()
{STACK s;s = new Node;s->next = NULL;return s;
}
bool Empty(STACK s)
{if (s->next)return false;elsereturn true;
}
void Push(elemType x, STACK s)
{STACK st;st = new Node;st->data = x;st->next = s->next;s->next = st;
}
void Pop(STACK s)
{STACK st;if (Empty(s))cout << "error";else{st = s->next;s->next = st->next;delete st;}
}
elemType Top(STACK s)
{if (s->next)return s->next->data;else{return NULL;}
}
void PreOrder(BTREE t)
{BTREE s[maxlength];int top = -1;while (t!=NULL||top!=-1){while (t != NULL){cout << t->data;s[++top] = t;t = t->Lchild;}if (top != -1){t = s[top--];t = t->Rchild;}}
}
void PreOrder(BTREE t)//栈模仿递归
{STACK S;S=MakeNull();BTREE p;p = new node;while (p!=NULL){cout << p->data << endl;if (p->Rchild != NULL)Push(p->Rchild,S);if (p->Lchild != NULL)p = p->Lchild;//进左子树else{p = Top(S);Pop(S);}}
}
void InOrder(BTREE t)
{BTREE s[maxlength];int top = -1;while (t != NULL || top != -1){while (t != NULL){top++;st[top].ptr = t;st[top].flag = 1;t = t->Lchild;}while (top!=-1&&st[top].flag==2){t = st[top--].ptr;cout << t->data << endl;}if (top != -1){st[top].flag = 2;t = st[top].ptr->Rchild;}}
}
void InOrder(BTREE t)
{BTREE p, pr;STACK S;S = MakeNull();p = t;while (p!=NULL||!Empty(S)){while (p != NULL){Push(p, S);pr = p->Rchild;p = p->Lchild;if (p == NULL)p = pr;}p = Top(S); Pop(S);cout << p->data << endl;if (!Empty(S) && Top(S)->Lchild == p)p = Top(S)->Rchild;elsep = NULL;}
}
BTREE create()
{BTREE t;char c = getchar();if (c == '#')return NULL;t = new node;t->data = c;t->Lchild = create();t->Rchild = create();return t;
}void main()
{ cout << "test";
}
父母结点实现后序遍历
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;struct node
{ElemType data;node* Lchild;node* Rchild;int flag;node* parent;
};void PostOrder(node* t)
{node* p;p = t;while (p != NULL){switch (p->flag){case 0:p->flag = 1;if (p->Lchild != NULL)p = p->Lchild;break;case 1:p->flag = 2;if (p->Rchild != NULL)p = p->Rchild;break;case 2:p->flag = 0;cout << p->data << endl;p = p->parent;break;}}
}void main()
{ cout << "test";
}
遍历实现
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;
int n=0;
int top;
struct node
{ElemType data;node* Lchild;node* Rchild;
};
typedef node* BTREE;
BTREE Q[maxlength];
BTREE S[maxlength];void LeverOrder(BTREE t)
{int front, rear;BTREE q;front = rear = 0;if (t == NULL)return;Q[++rear] = t;while (front!=rear){q = Q[++front];cout << q->data;if (q->Lchild != NULL)Q[++rear] = q->Lchild;if (q->Rchild != NULL)Q[++rear] = q->Rchild;}
}
int Count(BTREE t)//层次计数
{if (t == NULL)return 0;elsereturn 1 + Count(t->Lchild) + Count(t->Rchild);
}
int Count(BTREE t)//中序计数
{//n是初始变量,且为0if (t){Count(t->Lchild);n++;Count(t->Rchild);}
}
//求二叉树高度的算法
int Height(BTREE t)
{if (t == NULL)return 0;else{int m = Height(t->Lchild);int n = Height(t->Rchild);return (m > n) ? (m + 1) : (n + 1);}
}
//删除二叉树递归算法
void Destroy(BTREE t)
{if (t != NULL){Destroy(t->Lchild);Destroy(t->Rchild);delete t;//后序遍历}
}
//交换二叉树的所有子树的递归算法
void Exchange(BTREE t)
{node* p = t, * tmp;if (p != NULL){tmp = p->Lchild;p->Lchild = p->Rchild;p->Rchild = tmp;Exchange(t->Lchild);Exchange(t->Rchild);}}
//交换二叉树的所有子树的非递归算法void Exchange(BTREE t)
{ BTREE p , tmp;top = -1;if (t != NULL){S[++top] = t;while (top!=-1){p = S[top--];tmp = p->Lchild;p->Lchild = p->Rchild;p->Rchild = tmp;if (p->Lchild != NULL)S[++top] = p->Lchild;if (p->Rchild != NULL)S[++top] = p->Rchild;}}
}
线索二叉树
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;
struct node
{ElemType data;struct node* lchild;struct node *rchild;bool ltag, rtag; //表示其是否存在左右子树,若为空则另其指向前驱后继
};
typedef struct node* THTREE;//线索二叉树
THTREE pre = NULL;
THTREE InNext(THTREE P)//中序结点二叉树求结点p的中序后继
{THTREE Q;Q = P->rchild;if (P->rtag )while (Q->ltag)Q = Q->lchild;return Q;
}
THTREE InPre(THTREE P)//中序结点二叉树求结点p的中序前驱
{THTREE Q;Q = P->lchild;if (P->ltag)while (Q->rtag)Q = Q->rchild;return Q;
}
void ThInOrder(THTREE head)//通过InNext实现中序遍历
{THTREE tmp;tmp = head;do{tmp = InNext(head);if (tmp != head)cout << tmp->data <<endl ;} while (tmp!=head);
}
THTREE PreNext(THTREE p)//中序结点二叉树求结点p的先序后驱
{THTREE Q;if (p->ltag)Q = p->lchild;else{Q = p;while (!Q->rtag)Q = Q->rchild;Q = Q->rchild;}return Q;
}
void RInsert(THTREE S,THTREE R)
{THTREE W;R->rchild = S->rchild;R->rtag = S->rtag;R->lchild = S;//S是R的左线索R->ltag = false;S->rchild = R;//R是S的右子树S->rtag = true;if (R->rtag)//如果S还有右子树,则接上R{W = InNext(R);W->lchild = R;}
}
void InOrderTh(THTREE p)//二叉树中序线索化
{if (p){InOrderTh(p->lchild);//左子树线索化p->ltag = (p->lchild) ? true : false;//判断是否有左右子树,来给线索位置赋值p->rtag = (p->rchild) ? true : false;if (pre)//如果p的前驱存在{if (pre->rtag == false)//p的右标志为线索pre->rchild = p;//pre的右子树指向中序后继if (pre->ltag == false)//p的左标志为线索pre->lchild = p;//pre的左子树指向中序前驱}pre = p;//令pre为下一个中序前驱InOrderTh(p->rchild);//线索化右子树
}
二叉树的复制判断
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;
struct node
{ElemType data;struct node* lchild;struct node *rchild;
};
typedef struct node* BTREE;//线索二叉树int Equal(BTREE firstbt, BTREE secondbt)//二叉树是否等价
{int x;x = 0;if (firstbt == NULL && secondbt == NULL)return 1;else if(firstbt!=NULL&&secondbt!=NULL){if (firstbt->data == secondbt->data)if (Equal(firstbt->lchild, secondbt->lchild))x = Equal(firstbt->rchild, secondbt->rchild);}return x;
}
BTREE copy(BTREE oldtree)//复制二叉树
{BTREE temp;if (oldtree != NULL){temp = new node;temp->data = oldtree->data;temp->lchild = copy(oldtree->lchild);temp->rchild = copy(oldtree->rchild);return temp;}return NULL;
}
树的应用,集合
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;
struct CTNode
{//孩子结点int child;CTNode* next;
};
struct CTBox
{//表头结点ElemType data;CTNode* firstchild;};
struct
{CTBox nodes[maxlength];int n, r;
}CTree;
//顺序存储struct CSNode
{//链式存储长子制,树的最左子树为长子,他管理剩下的子树ElemType data;CSNode* firstchild;CSNode* rightsib;
};
typedef CSNode* CSTREE;
struct node
{ElemType data;node* lchild;node* rchild;
};
typedef node* bitree;bitree foresttobitree(CTNode *p)//森林变成二叉树
{bitree s;if (p == NULL)s = NULL;else{s = new node;s->data = CTree.nodes[p->child].data;s->lchild = foresttobitree(CTree.nodes[p->child].firstchild);s->rchild = foresttobitree(p->next);}return s;
}
typedef int MFSET[maxlength + 1];//集合定义
//集合∪操作
void Union(int i, int j, MFSET parent)
{parent[i] = j;
}
void Initial(int x,MFSET parent)
{parent[x] = 0;
}
//寻找结点子树
int Find(int i, MFSET parent)
{int tmp = i;while (parent[tmp] != 0)tmp = parent[tmp];//回溯return tmp;
}
typedef struct
{int father;int count;
}mfset[maxlength + 1];//加权集合void UNION(int a, int b, mfset c)
{if (c[a].count > c[b].count){c[b].father = a;c[a].count += c[b].count;}else{c[a].father = b;c[b].count += c[a].count;}}
void Initial(int x, mfset c)
{c[x].count = 1;c[x].father = 0;
}
int find1(int i, mfset parent)
{int tmp = i;while (parent[tmp].father != 0)tmp = parent[tmp].father;//回溯return tmp;
}
void Equivalence(mfset S)
{int i, j, k,m;for (int i = 1; i <= maxlength + 1; i++)Initial(i, S);cin >> i >> j;//读入等价对while (!(i==0&&j==0))//等价对未读完{k = find1(i, S);//求i和j的根m = find1(j, S);if (k != m)UNION(i, j, S);//合并cout << i << j;}
}
哈夫曼树
#include <iostream>
#include<stdlib.h>
#define maxlength 10
using namespace std;typedef char ElemType;typedef struct
{double weight;int lchild;int rchild;int parent;
}HTNODE;
typedef struct
{ElemType ch;char bits[maxlength+1];
}CodeNode;
typedef CodeNode HuffmanCode[maxlength];typedef HTNODE HuffmanT[2*maxlength-1];
void initHT(HuffmanT T)
{for (int i = 0; i < 2 * maxlength - 1; i++){T[i].lchild = -1;T[i].rchild = -1;T[i].parent = -1;T[i].weight = 0;}
}
void inputW(HuffmanT T)
{for (int i = 0; i < 2 * maxlength - 1; i++){cin >>T[i].weight;}
}
void SelectMin(HuffmanT T, int i, int* p1, int* p2)
{if (T[i].weight < T[i + 1].weight)*p2 = i,*p1=i+1;else*p2 = i + 1,*p1=i;
}
void CreatHT(HuffmanT T)
{int i, p1, p2;initHT(T);inputW(T);for (int i = 0; i < 2 * maxlength - 1; i++){SelectMin(T, i, &p1, &p2);T[p1].parent = T[p2].parent = i;T[i].lchild = p1;T[i].rchild = p2;T[i].weight = T[p1].weight + T[p2].weight;}
}
HuffmanT T;
//根据哈夫曼树求哈夫曼表
void CharSetHuffmanEncoding(HuffmanT T, HuffmanCode H)
{int c, p, i;//c,p分别表示指示T中孩子和双亲的位置char cd[maxlength + 1];//临时存放编码int start;//指示编码在cd中的位置cd[0] = '\0';//编码结束符for (i = 0; i < maxlength; i++)//依次求叶子[i]的编码{H[i].ch = getchar();//读入叶子结点T[i]对应的字符start = maxlength;//编码起始位置的初值c = i;//从叶子T[i]开始上溯while (p=T[c].parent>=0)//直到上溯T[c]是树根{cd[--start] = (T[p].lchild == c) ? '0' : '1';//如果T[c]是T[p]的左孩子,生成0,否则1c = p;//上溯}strcpy(H[i].bits, &cd[start]);//复制编码H}
}
图的构造
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;typedef char VertexData;
typedef int EdgeData;
//线性表
typedef struct
{VertexData verlist[NumVertices];//顶点表EdgeData edge[NumVertices][NumVertices];//邻接矩阵int n, e;
}MTGraph;
void CreateMGraph(MTGraph *G)
{int i, j, k, w;cin >> G->n >> G->e;//输入顶点数和边数for (i = 0; i < G->n; i++)G->verlist[i] = getchar();for (i = 0; i < G->n; i++)for (j = 0; j < G->n; j++)G->edge[i][j]=0;for (k = 0; k < G->e; k++){cin >> i >> j >> w;//输入边的权值G->edge[i][j] = w;}}
typedef struct node//边表结点
{int adjvex;//邻接点域EdgeData cost;//边上权值node* next;
}EdgeNode;
typedef struct//顶点表结点
{VertexData vertex;//顶点数据域node* firstedge;//边表头指针;}VertexNode;
typedef struct//图的邻接表
{VertexNode vexlist[NumVertices];int n, e;
}AdjGraph;
//建立邻接链表
void CreateGraph(AdjGraph* G)
{int i, head,tail,weight;cin >> G->n >> G->e;for (i = 0; i < G->n; i++){cin >> G->vexlist[i].vertex;//输入顶点信息G->vexlist[i].firstedge = NULL;}for (i = 0; i < G->e; i++){cin >> head >> tail >> weight;//输入边的信息EdgeNode* p = new EdgeNode;//建立边结点p->adjvex = head;p->cost = weight;p->next = G->vexlist[tail].firstedge;//链入第head号的链表前段,头插法插入边G->vexlist[tail].firstedge = p;}
}
深度优先算法
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;typedef char VertexData;
typedef int EdgeData;
//线性表
typedef struct
{VertexData verlist[NumVertices];//顶点表EdgeData edge[NumVertices][NumVertices];//邻接矩阵int n, e;
}MTGraph;
void CreateMGraph(MTGraph *G)
{int i, j, k, w;cin >> G->n >> G->e;//输入顶点数和边数for (i = 0; i < G->n; i++)G->verlist[i] = getchar();for (i = 0; i < G->n; i++)for (j = 0; j < G->n; j++)G->edge[i][j]=0;for (k = 0; k < G->e; k++){cin >> i >> j >> w;//输入边的权值G->edge[i][j] = w;}}
typedef struct node//边表结点
{int adjvex;//邻接点域EdgeData cost;//边上权值node* next;
}EdgeNode;
typedef struct//顶点表结点
{VertexData vertex;//顶点数据域node* firstedge;//边表头指针;}VertexNode;
typedef struct//图的邻接表
{VertexNode vexlist[NumVertices];int n, e;
}AdjGraph;
//建立邻接链表
void CreateGraph(AdjGraph* G)
{int i, head,tail,weight;cin >> G->n >> G->e;for (i = 0; i < G->n; i++){cin >> G->vexlist[i].vertex;//输入顶点信息G->vexlist[i].firstedge = NULL;}for (i = 0; i < G->e; i++){cin >> head >> tail >> weight;//输入边的信息EdgeNode* p = new EdgeNode;//建立边结点p->adjvex = head;p->cost = weight;p->next = G->vexlist[tail].firstedge;//链入第head号的链表前段,头插法插入边G->vexlist[tail].firstedge = p;}
}
bool visited[NumVertices];//是否访问过
int dfn[NumVertices];//顶点的先深编号
int Count ;
void DFSX(AdjGraph* G, int i)
{EdgeNode* p;cout << G->vexlist[i].vertex;visited[i] = true;//已经被访问过了,不可再被访问dfn[i] = Count++;//编号p = G->vexlist[i].firstedge;//取边表头指针while (p){if (!visited[p->adjvex])//依次搜索邻接结点,如果尚未访问,则遍历深搜DFSX(G, p->adjvex);p = p->next;}}
void DFSY(MTGraph* G, int i)
{//邻接矩阵实现深度优先搜索int j;EdgeNode* p;cout << G->verlist[i];visited[i] = true;//已经被访问过了,不可再被访问dfn[i] = Count++;//编号for (j = 0; j < G->n; j++)if ((G->edge[i][j] == 1) && !visited[i])DFSY(G, i);
}
void DFSTraverse(AdjGraph G)
{int i, Count = 1;for (i = 0; i < G.n; i++)visited[i] = false;//初始化for (i = 0; i < G.n; i++){if (!visited[i])DFSX(&G, i);}
}
广度优先算法
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;typedef char VertexData;
typedef int EdgeData;
//线性表
typedef struct
{VertexData verlist[NumVertices];//顶点表EdgeData edge[NumVertices][NumVertices];//邻接矩阵int n, e;
}MTGraph;typedef struct node//边表结点
{int adjvex;//邻接点域EdgeData cost;//边上权值node* next;
}EdgeNode;
typedef struct//顶点表结点
{VertexData vertex;//顶点数据域node* firstedge;//边表头指针;}VertexNode;
typedef struct//图的邻接表
{VertexNode vexlist[NumVertices];int n, e;
}AdjGraph;
//建立邻接链表
void CreateGraph(AdjGraph* G)
{int i, head,tail,weight;cin >> G->n >> G->e;for (i = 0; i < G->n; i++){cin >> G->vexlist[i].vertex;//输入顶点信息G->vexlist[i].firstedge = NULL;}for (i = 0; i < G->e; i++){cin >> head >> tail >> weight;//输入边的信息EdgeNode* p = new EdgeNode;//建立边结点p->adjvex = head;p->cost = weight;p->next = G->vexlist[tail].firstedge;//链入第head号的链表前段,头插法插入边G->vexlist[tail].firstedge = p;}
}
bool visited[NumVertices];//是否访问过
int dfn[NumVertices];//顶点的先深编号
int Count ;
typedef int ElemType;
struct celltype
{ElemType data;celltype* next;
};//结点型
struct QUEUE
{celltype* front;celltype* rear;
};
void MakeNull(QUEUE& Q)
{Q.front = new celltype;Q.front->next = NULL;Q.rear = Q.front;
}
bool Empty(QUEUE& Q)
{if (Q.rear == Q.front)return true;elsereturn false;
}
void EnQueue(ElemType x, QUEUE Q)
{celltype* q;q = new celltype;q->data = x;q->next = NULL;Q.rear->next = q;Q.rear = q;
}
void DeQueue(QUEUE& Q)
{celltype* q;if (Empty(Q))cout << "empty";q = Q.front->next;Q.front->next = q->next;if (q->next == NULL)Q.rear = Q.front;delete q;
}
ElemType Front(QUEUE& Q)
{if (Empty(Q))cout << "empty";elsereturn Q.front->next->data;
}
//广度优先算法
void BFS1(AdjGraph* G, int k)
{int i; EdgeNode* p;QUEUE Q;MakeNull(Q);cout << G->vexlist[k].vertex;visited[k] = true;EnQueue(k, Q); //进队列while (!Empty(Q))//队空则结束{i = Front(Q);DeQueue(Q); //vi出队p = G->vexlist[i].firstedge;//取出vi的边表头指针while (p)//遍历vi邻接点{if (!visited[p->adjvex])//如果邻接点vj没有被访问国{cout << G->vexlist[p->adjvex].vertex;visited[p->adjvex] = true;//访问结束EnQueue(p->adjvex, Q);//访问过的vj入队列}p = p->next;//vi的下一个邻接点}}}
void BFS2(MTGraph* G, int k)
{int i,j;QUEUE Q; MakeNull(Q);cout << G->verlist[k];visited[k] = true;EnQueue(k, Q);while (!Empty(Q)){i = Front(Q);for (j = 0; j < G->n; j++){if (G->edge[i][j] == 1 && !visited[j]){cout << G->verlist[j];visited[i] = true;EnQueue(j, Q);}}}
}
void BFSTraverse(AdjGraph G)
{int i,Count=1;for (i = 0; i < G.n;i++)visited[i] = false;for (i = 0; i < G.n; i++)if (!visited[i])BFS1(&G, i);
}
最小生成树prim算法
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;
typedef int Costtype;
int infinity = 10000000;
void Prim(Costtype C[NumVertices + 1][NumVertices + 1])
{Costtype LOWCOST[NumVertices + 1];int CLOSEST[NumVertices + 1];int i, j, k;Costtype min;for (i = 2; i <= NumVertices; i++){LOWCOST[i] = C[1][i];CLOSEST[i] = 1;}for (i = 2; i <= NumVertices; i++){min = LOWCOST[i];k = i;for(j=2;j<=NumVertices;j++)if (LOWCOST[j] < min){min = LOWCOST[j];k = j;}cout << "(" << k << "," << CLOSEST[k] << ")" << endl;LOWCOST[k] = infinity;for (j = 2; j <= NumVertices; j++)if (C[k][j] < LOWCOST[j] && LOWCOST[j] < infinity){LOWCOST[j] = C[k][j];CLOSEST[j] = k;}}
}
kraskal算法
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;typedef struct edge
{int wgn, end, wet;}Edge;
int Find(int father[],int v )
{int f = v;while (father[f]>0){f = father[f];return f;}
}
void Kraskal(Edge edges[], int e)
{int father[NumVertices];int bnf, edf, i;for (i = 1; i <= e; i++)father[i] = 0;for (i = 1; i <= e; i++){bnf = Find(father, edges[i].wgn);edf = Find(father, edges[i].end);if (bnf != edf)father[bnf] = edf;}
}
void main()
{int n;Edge edges[NumVertices];cin >> n;Sort(edges, n);Kraskal(edges, n);
}
Dijkstra
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;
typedef int Costtype;
int infinity = 10000000;Costtype Mincost(Costtype D[NumVertices + 1], bool S[NumVertices + 1])
{int temp = infinity;int w = 2;for(int i=2;i<=NumVertices;i++)if (!S[i] && D[i] < temp){temp = D[i];w = i;}return w;
}
void Dijkstra(int C[NumVertices][NumVertices], Costtype D[NumVertices + 1], int P[NumVertices], bool S[NumVertices + 1])
{int w; int sum;for (int i = 2; i <= NumVertices; i++){D[i] = C[1][i];S[i] = false;P[i] = 1; }S[1] = true;for (int i = 1; i <= NumVertices-1; i++){w = Mincost(D, S);for(int v=0;v<=NumVertices;v++)if (S[v] != true){sum = D[w] + C[w][v];if (sum < D[v]){D[v] = sum;P[v] = w;}}}
}
floyd
#include <iostream>
#include<stdlib.h>
#define NumVertices 100
using namespace std;
typedef int costtype;
int infinity = 10000000;void Floyd(costtype D[NumVertices][NumVertices], costtype C[NumVertices][NumVertices], int P[NumVertices][NumVertices], int n)
{int i, j, k;for (i = 0; i < n; i++)for (j = 0; j < n; i++){D[i][j] = C[i][j];P[i][j] = -1;}for (k = 0; k < n; k++)for (i = 0; i < n; i++)for (j = 0; j < n; j++)if (D[i][k] + D[k][i] < D[i][j]){D[i][j] = D[i][k] + D[k][i];P[i][j] = k;}}
拓扑排序
typedef struct NODE //每个链表类型
{int adjvex; //根据邻接表很容易找到指向的顶点struct NODE* next;
}*Node;
typedef struct
{Elevement data;int count;Node firstadj;
}VNode; //邻接表存储
void topsort(VNode adj[],int n)
{int i,j,m=0;int St[maxv],top=-1;Node p;for(i=0;i<n;i++) //先把入度为0的元素进栈{if(adj[i].degree==0){top++;St[top]=i} }while(top>-1){i=St[top--];printf("%d",i);p=adj[i].firstadj; //p指向 i 的第一个节点m++; //m用于计算出栈的元素个数while(p!=NULL){j=p->adjvex; // j 为 p 指向的节点再adj[]里面的下标adj[j].degree--;if(adj[j].degree==0) //如果入度为0则进栈,否则p向后移动,指向下一个与i 连接的顶点信息;{top++; St[top]=j; //栈内存储的只是一个下标}p=p->next;}}if(m<n){printf("有环");}}
查找
#include <iostream>
#include<stdlib.h>
#define maxsize 100
using namespace std;
typedef int keytype;
typedef int fields;struct records
{keytype key;fields other;
};
typedef records List[maxsize];
List F;int SEARCH(List F, keytype k, int last)
{int i;F[0].key = k;i = last;while (F[i].key!=k)i = i - 1;return i;
}struct celltype
{records data;celltype* next;
};
typedef celltype* list;list search(keytype k, list F)
{list p = F;while (p!=NULL){if (p->data.key == k)return p;elsep = p->next;}return p;
}
//折半查找
int BinSearch1(keytype k, List F,int last)
{int low, up,mid;low = 1; up = last;while (low<up){mid = (low + up) / 2;if (F[mid].key == k)return mid;else if (F[mid].key > k)up = mid - 1;elselow = mid + 1;}return 0;
}
//递归折半
int BinSearch2(keytype k, List F, int low,int up)
{int mid;if (low > up)return 0;else{mid = (low + up) / 2;if (k < F[mid].key)return BinSearch2(k, F, low, mid - 1);else if (k > F[mid].key)return BinSearch2(k, F, mid + 1, up);elsereturn mid;}
}
二叉查找树
#include <iostream>
#include<stdlib.h>
#define maxsize 100
using namespace std;
typedef int keytype;
typedef int fields;struct records
{keytype key;fields other;
};
struct celltype
{records data;celltype* rchild,*lchild;
}BSTNode;
typedef celltype* BST;
BST SearchBST(keytype k, BST F)
{BST p = F;if (p == NULL || k == p->data.key)return p;if (k < p->data.key)return SearchBST(k, p->lchild);elsereturn SearchBST(k, p->rchild);
}
void InsertBST(records R, BST F)
{if (F == NULL){F = new celltype;F->data = R;F->lchild = NULL;F->rchild = NULL;}else if (R.key < F->data.key)InsertBST(R, F->lchild);else if (R.key > F->data.key)InsertBST(R, F->rchild);
}
BST CreatBST()
{ BST F=NULL;keytype k;cin >> k;while (k){InsertBST(R, F);cin >> k;}return F;
}
records deletemin(BST& F)
{records tmp; BST P;if (F->lchild == NULL){P = F;tmp = P->data;F = F->rchild;delete P;return tmp;}elsereturn deletemin(F->lchild);
}
void DeleteB(keytype k, BST& F)
{if (F != NULL)if (k < F->data.key)DeleteB(k, F->lchild);else if (k > F->data.key)DeleteB(k, F->rchild);elseif (F->lchild == NULL)F = F->rchild;else if (F->rchild == NULL)F = F->lchild;elseF->data = deletemin(F->rchild);
}
相关文章:

854之数据结构
一.线性表 1.顺序表 #include <iostream> #include<stdlib.h> using namespace std; #define max 100 typedef struct {int element[max];int last; } List; typedef int position ; void Insert(int x, position p, List &L) {position q;if (L.last > ma…...

Redis从基础到进阶篇(二)----内存模型与内存优化
目录 一、缓存通识 1.1 ⽆处不在的缓存 1.2 多级缓存 (重点) 二、Redis简介 2.1 什么是Redis 2.2 Redis的应用场景 三、Redis数据存储的细节 3.1 Redis数据类型 3.2 内存结构 3.3 内存分配器 3.4 redisObject 3.4.1 type 3.4.2 encoding 3…...

DBO优化SVM的电力负荷预测,附MATLAB代码
今天为大家带来一期基于DBO-SVM的电力负荷预测。 原理详解 文章对支持向量机(SVM)的两个参数进行优化,分别是:惩罚系数c和 gamma。 其中,惩罚系数c表示对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。c越小࿰…...

第一百二十五回 dart中List和Map的常见用法
文章目录 概念介绍使用方法初始化相互转换元素操作 经验分享 我们在上一章回中介绍了Flexible组件相关的内容,本章回中将介绍 dart中的List和Map.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的List也叫列表,它表示一组相…...

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2
紧接上文 4、新建Maven项目 clean package -Dmaven.test.skiptrue 用于构建项目并跳过执行测试 拉到最后选择构建后操作 SSH server webExec command scp 192.168.77.18:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/ /usr/loca…...

林【2021】
三、应用 1.字符串abaaabaabaa,用KMP改进算法求出next和nextval的值 2.三元组矩阵 4.二叉树变森林 四、代码(单链表递增排序,二叉树查找x,快速排序)...

c语言练习题30:判断一个数是否为2^n
判断一个数是否为2^n 思路:2^n中只有一个1故可以通过n&(n-1)是否为0来判断。 代码:...

VX小程序 实现区域转图片预览
图例 方法一 1、安装插件 wxml2canvas npm install --save wxml2canvas git地址参照:https://github.com/wg-front/wxml2canvas 2、类型 // 小程序页面 let data{list:[{type:wxml,class:.test_center .draw_canvas,limit:.test_center,x:0,y:0}] } 3、数据结…...

HTML5-1-标签及属性
文章目录 语法规范标签规范标签列表通用属性基本布局 页面的组成: HTML(HyperText Markup Language,超文本标记语言)是用来描述网页的一种语言,它不是一种编程语言,而是一种标记语言。 HTML5 是下一代 HTM…...

5017. 垦田计划
Powered by:NEFU AB-IN Link 文章目录 5017. 垦田计划题意思路代码 5017. 垦田计划 题意 略 思路 二分最小需要几天即可 注意: 天数不能低于k二分时,若耗时天数小于mid,直接continue 代码 /* * Author: NEFU AB-IN * Date: 2023-08-26 22:4…...

【校招VIP】产品思维分析之面试新的功能点设计
考点介绍: 这种题型是面试里出现频度最高,也是难度最大的一种,需要面试者对产品本身的功能、扩展性以及行业都有一定的了解。而且分析时间较短,需要一定的产品能力和回答技巧。 『产品思维分析之面试新的功能点设计』相关题目及解…...

indexDB vue 创建数据库 创建表 添加对象数据
1 .open(dbName,1) 版本号可以省略 let dbName hist-data-1dconst request indexedDB.open(dbName); // 如果你不知道数据库的版本号,可以省略第二个参数,这样 indexedDB 会默认为你打开最新版本的数据库,因为版本号总是自增长的 2 第一次…...

Django基础1——项目实现流程
文章目录 一、前提了解二、准备开发环境2.1 创建项目2.1.1 pycharm创建2.1.2 命令创建 2.2 创建应用 例1:效果实现例2:网页展示日志文件 一、前提了解 基本了解: 官网Django是Python的一个主流Web框架,提供一站式解决方案…...

基于SSM的在线购物系统——LW模板
摘 要 人类进入21世纪以来,很多技术对社会产生了重大的影响。信息技术是最具代表的新时代技术,信息技术起源于上世纪,在起初的时候只是实现在单机上进行信息的数字化管理,随着网络技术、软件开发技术、通讯技术的发展,…...

Mac操作系统上设置和配置PPPoE连接
嗨,在使用Mac的小伙伴么!你是否在Mac操作系统上尝试设置和配置PPPoE连接,却不知道怎么设置?别担心,今天我将为你一步步教你如何在Mac上进行设置和配置。无论你是新手还是有经验的用户,本文都将帮助你轻松完…...

Python类的属性和方法
Python类是一种面向对象编程的基本概念,它可以用来创建对象,对象可以拥有属性和方法。 属性是类的特征,它们用于存储对象的状态。属性可以是任何数据类型,例如整数、字符串、列表等。在类中,属性通常定义为类的变量&am…...

C#Queue<T>队列出现弹出元素被最后一次压入得元素覆盖的问题
问题代码: //以下为现有代码的大概描述,只可意会,不可执行!!!Queue<Move> mQueue new Queue<Move>(); //该接口为下面描述线程A、线程B调用的接口 private void ActionTrigger(Move move)//M…...

python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址)
文章目录 一.前言二.展示1.banner1.静图2.动图 2.一般视频组件1.静图2.动图 3.排行榜1.静图2.动图 三.设计心得(顺序由简到难)1.排行榜2.一般视频组件3.banner 四.总结五.下载地址 一.前言 播客二连发&…...

聚类分析概述
聚类分析(Cluster Analysis)是一种无监督学习方法,用于将数据点划分为具有相似特征的组或簇。聚类分析的目标是使同一簇内的数据点之间的相似性最大化,而不同簇之间的相似性最小化。聚类分析在许多领域中都有广泛的应用࿰…...

建模杂谈系列234 基于图的程序改造
说明 为了进一步提升程序设计与运维的可靠性,我觉得(目前看来)只有依赖图的结构。 提升主要包含如下方面: 1 程序结构的简洁性:节点和边2 程序执行的可视化:交通图(红、黄、绿)3 程序支持的逻辑复杂性。…...

requestAnimationFrame(RAF)
1、RAF介绍 requestAnimateFrame(RAF)动画帧,是一个做动画的API。 如果想要一个动画流畅,就需要以60帧/s来更新视图,那么一次视图的更新就是16.67ms。 想要达到上述目标,可以通过setTimeout定时器来手动控…...

【JavaScript笔记】面对对象与构造函数
笔记作用 了解面向对象编程中的一般概念 能够基于构造函数创建对象 理解 JavaScript 中一切皆对象的语言特征 理解引用对象类型值存储的的特征 掌握包装类型对象常见方法的使用 一、深入对象 了解面向对象的基础概念,能够利用构造函数创建对象。 1. 构造函数 …...

LeetCode解法汇总5-正则表达式匹配
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一棵…...

前端开发工具: VSCode
VSCode 安装使用教程(图文版) | arry老师的博客-艾编程 1. 下载 在官方网站:https://code.visualstudio.com/ 下载最新版本的 VSCode 即可 2. VSCode 常见插件安装 所有插件安装后,需要重启一下才生效 2.1 简体中文语言包 2.2 编辑器主…...

【Stable-Diffusion-WebUI】Windows系统安装Stable-Diffusion-WebUI
写在前面 基于 stable-diffusion 封装的 webui 开源项目,通过界面交互的方式来使用 stable-diffusion,降低了使用门槛,可以通过本地部署的方式进行访问,对电脑的配置要求较高,以下配置要求仅供参考 GPU显卡ÿ…...

面试题(三)
目录 一.Spring 1.Spring IOC & AOP 2.Spring bean (1) 作用域 (2) Spring 中的 bean ⽣命周期 (3) Spring 框架中⽤到了哪些设计模式 二.Mybatis 1.标签 2.Dao接口 3.返回与映射 4.延迟加载 三.Kafka 四.设计模式 1.IO 设计模式 2.Spring 中的设计模式详解…...

谈谈子网划分的定义、作用、划分方式以及案例
个人主页:insist--个人主页 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、子网划分的定义 二、子网掩码的作用 1、…...

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(下)
文章目录 多路复用器简介多路复用器的两个阶段Java中的多路复用器封装测试代码压测结果总结 本篇文章是BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)的下一篇, 如果没有看的小伙伴, 可以先看下, 不然可能会不连贯. 多路复用器简介 多路复用器是对…...

Pandas数据分析教程-pandas的数据结构
pandas数据分析-pandas的数据结构 pandas 数据结构Series1. 创建Series数组2. 性质3. 索引4. 运算DataFrame1. 创建Df数组2. 性质3.索引4. 对列进行增删改Index Objects本文介绍pandas中一些常用的属性方法的概述,给读者提供快速学习的架构和思路。表格中提供的一些参数方法没…...

ChatGPT在医疗系统的应用探索动态
注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 生成式人工智能,如OpenAI开发的ChatGPT,被认为是可以颠覆医疗行业的工具。尽管该技术刚刚起步,但已有许多医…...