热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

算法代码备忘录(2)

#include using namespace std;typedef struct CharNode{//存储字符的链表 char data; struct CharNode *next; }C

#include
using namespace std;

typedef struct CharNode{//存储字符的链表
char data;
struct CharNode *next;
}CharNode,*CharLinkList;

/工具:栈/
//定义栈
typedef struct Sqstack{
CharNode data[50];
int top=-1;//???
};
//入栈
bool Push(Sqstack &s,CharNode
i){
if (s.top49){
cout<<“占满”< return false;
}
s.data[++s.top]=i;
return true;
}
//出栈
bool Pop(Sqstack &s,CharNode* &o){
if (s.top
-1){
cout<<“栈空”< return false;
}
o=s.data[s.top–];
return true;
}
//判断栈是否为空
bool IsEmpty(Sqstack &S){
if(S.top==-1){
return true;
}else{
return false;
}
}
//获取栈顶元素
bool GetTop(Sqstack &S,CharNode* &o){
if (S.top==-1){
return false;
}
o=S.data[S.top];
return true;
}

/*1,

  • ——————————————————
  • 一:线性表线性结构
  • ——————————————————
  • */
    #define MaxSize 10
    typedef struct {
    int data[MaxSize];
    int length;
    }SqList;

/*2,

  • ——————————————————
  • 二:线性表链式结构
  • ——————————————————
  • */
    //单链表
    typedef struct LNode{
    int data;
    struct LNode *next;
    }LNode,LinkList;//别名,强调结点用LNode,强调链表用LinkList
    //双链表
    typedef struct DNode{
    int data;
    struct DNode *prior,*next;
    }DNode,*DLinkList;

/2.1,初始化一个单链表(自定义用于实验)/
LinkList initLinkList(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}

/2.3打印链表/
void print_L(LinkList L){
LinkList p=L->next;
while (p!=NULL){
cout<<"{" p=p->next;
}
cout< }
/2.4打印单循环链表/
void print_CL(LinkList L){
LinkList p=L->next;
while (p!=L){
cout<<"{" p=p->next;
}
cout< }

/典例1:删除Min,max之间的值/

/典例2:逆向输出(回溯)/

/典例3:链表逆置/

/典例3:排序(插入排序)⭐⭐⭐/

/典例4:有序输出⭐⭐⭐/

/典例5:去重⭐⭐⭐/

/典例6[头插尾插法]:头插+尾插混合⭐⭐⭐/
LinkList L_apart(LinkList &A){
//工作指针(头尾公用指针)
LNode *p=A->next;
//B的初始化,及B头插法指针定义;辅助指针r(防断)
LinkList B=(LinkList) malloc(sizeof (LNode));
B->next=NULL;
LNode r;
//A的初始化,及A尾插法指针定义;A头指针ra
LNode ra=A;
while(p!=NULL){
ra->next=p; ra=p; p=p->next;//尾插
if(p!=NULL){
r=p->next; p->next=B->next; B->next=p; p=r;//头插
}
}
ra->next=NULL;//头插必备(最后一个元素指向NULL)
print_L(A);
print_L(B);
return B;
}
/典例7[双链表操作]:两递减归并一递增————!!!链表归并问题(重要)!!!//
-----------------------------------------------
/
//7.1初始化两个递增链表(用于实验)
LinkList initLinkList1(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=3;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=5;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=7;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=9;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
LinkList initLinkList2(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=2;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=4;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=6;
L->next=b;b->next=c;c->next=d;d->next=NULL;
return L;
}
//7.2进行归并
LinkList MergeList(LinkList &La,LinkList &Lb){
LNode *pa=La->next,*pb=Lb->next;//初始化头插la,lb的工作指针
//LNode *ra,*rb;//优化
LNode *r;//初始化头插la,lb的放断指针(只在插入时起作用,若是一次插入一个不是并行使用,那么可以只用一个放断指针)
La->next=NULL;//用la作为归并后的链表
while(pa&&pb){
if (pa->datadata){
r=pa->next;//跟踪下一个(放断)
pa->next=La->next;//把头结点之后放到要插之后
La->next=pa;
pa=r;//工作指针复位(物归原主)
} else{
r=pb->next;//跟踪下一个(放断)
pb->next=La->next;//把头结点之后放到要插之后
La->next=pb;
pb=r;//工作指针复位(物归原主)
}
}
/while(pa){
ra=pa->next;//跟踪下一个(放断)
pa->next=La->next;//把头结点之后放到要插之后
La->next=pa;
pa=ra;//工作指针复位(物归原主)
}
/
if (pa) pb=pa;//代码优化

while(pb){
r=pb->next;//跟踪下一个(放断)
pb->next=La->next;//把头结点之后放到要插之后
La->next=pb;
pb=r;//工作指针复位(物归原主)
}
free(Lb);
return La;

}

/典例8[双链表操作]:用A、B的公共元素组合成C————!!!链表归并问题(重要)!!!//-----------------------------------------/
//8.1初始化两个递增链表(用于实验)
LinkList initLinkList3(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
LinkList initLinkList4(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=2;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=3;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=4;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=9;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=NULL;
return L;
}
//8.2生成C
LinkList Create_Common1(LinkList &La,LinkList &Lb){
//初始C,原序构造用尾插法
LinkList C=(LinkList) malloc(sizeof (LNode));
C->next=NULL;
//尾插:尾指针、工作指针
LNode *rc=C,*pa=La->next,*pb=Lb->next;
while(pa&&pb){
while (pa&&pb&&pa->datadata){
pa=pa->next;
}
if (pa&&pb&&pa->datapb->data){
rc->next=pa;
rc=pa;
pa=pa->next;pb=pb->next;
}
while (pa&&pb&&pa->datadata){
pa=pa->next;
}
if (pa&&pb&&pa->data
pb->data){
rc->next=pa;
rc=pa;
pa=pa->next;pb=pb->next;
}
}
rc->next=NULL;
return C;

}
//8.3生成C[->高度优化版<-]
LinkList Create_Common2(LinkList &La,LinkList &Lb){
//初始C,原序构造用尾插法
LinkList C=(LinkList) malloc(sizeof (LNode));
C->next=NULL;
//尾插:尾指针、工作指针;*s复制公共点(防止破坏A、B结构)
LNode *rc=C,*pa=La->next,*pb=Lb->next,*s;
while(pa&&pb){
if (pa->datadata){
pa=pa->next;
} else if(pa->datadata){
pb=pb->next;
} else{
s=(LinkList) malloc(sizeof (LNode));
s->data=pa->data;
rc->next=s;//复制公共结点的值
rc=s;//尾指针后移
pa=pa->next;pb=pb->next;
}
}
rc->next=NULL;
return C;

}
//将公共结点放入A中(即不用考虑结构破坏)
LinkList Create_Common3(LinkList &La,LinkList &Lb){

//尾插:尾指针、工作指针
LNode *pa=La->next,*pb=Lb->next,*s;
La->next=NULL;
LNode *ra=La;
while(pa&&pb){
if (pa->datadata){
pa=pa->next;
} else if(pa->datadata){
pb=pb->next;
} else{
ra->next=pa;//复制公共结点的值
ra=pa;//尾指针后移
pa=pa->next;pb=pb->next;
}
}
ra->next=NULL;
return La;

}

/典例9[单链表子序列]:判断B是否是A的子序列————!!!类KPL,子序列匹配(重要)!!!//--------------------------------------/
LinkList initLinkList5(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=2;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
LinkList initLinkList6(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=2;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=3;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=4;
/*LNode e=(LinkList) malloc(sizeof (LNode));
e->data=9;
/
L->next=b;b->next=c;c->next=d;/d->next=e;/d->next=NULL;
return L;
}
bool Judg_Subset(LinkList &La,LinkList &Lb){
//遍历La、Lb的工作指针;tmep记录上次a开始的位置,再次比较时从上次开始(temp)位置的下一个位置开始
LNode *pa=La->next,*temp=La->next,*pb=Lb->next;
while (pa&&pb){
if (pb->data!=pa->data){
pa=temp->next;//若比较失败则从上次a开始位置的下一个位置开始
temp=pa;
pb=Lb->next;//b每次都从开头开始比较
} else {
pa=pa->next;
pb=pb->next;//只有相同时b才会指向下一个;只有b全部相同时,pb指向了最后一个下一个才会为空
}
}
if (pb==NULL)
return true;
return false;
}
/典例9.1:2012真题公共后缀/

CharLinkList Common_char(){
//头结点
CharNode *str1=(CharLinkList) malloc(sizeof (CharNode));
CharNode *str2=(CharLinkList) malloc(sizeof (CharNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点load
CharNode *a=(CharLinkList) malloc(sizeof (CharNode));
a->data=‘l’;
CharNode *b=(CharLinkList) malloc(sizeof (CharNode));
b->data=‘o’;
CharNode *c=(CharLinkList) malloc(sizeof (CharNode));
c->data=‘a’;
CharNode *d=(CharLinkList) malloc(sizeof (CharNode));
d->data=‘d’;
str1->next=a;a->next=b;b->next=c;c->next=d;

//数据结点be
CharNode *a1=(CharLinkList) malloc(sizeof (CharNode));
a1->data='b';
CharNode *b1=(CharLinkList) malloc(sizeof (CharNode));
b1->data='e';
a1->next=b1;
str1->next=a;str2->next=a1;
//定义公共结点ing
CharNode *a2=(CharLinkList) malloc(sizeof (CharNode));
a2->data='i';
CharNode *b2=(CharLinkList) malloc(sizeof (CharNode));
b2->data='n';
CharNode *c2=(CharLinkList) malloc(sizeof (CharNode));
c2->data='g';
a2->next=b2;b2->next=c2;c2->next=NULL;
d->next=a2;b1->next=a2;
//定义两链表工作指针
CharNode *p1=str1->next,*p2=str2->next;
CharNode *temp=p1;//存储str开始的结点
CharNode *t=p1;//标记最后一个相同开始点
CharNode *t2=str2->next;//标记str2开始结点
while (p2){
p1=str1->next;
temp=p1;if (p1->data!=p2->data){
p1=temp->next;//比较失败则再从上一次开始地方的下一个地方开始
p2=t2;//失败了则p2从头开始
temp=p1;
}else{
p1=p1->next;
p2=p2->next;
}
}
t2=t2->next;
if (p1==NULL&&p2==NULL){
cout<data;
}
}

/典例10[循环双链表]:判循环链表是否对称//--------------------------------------/
//10.1定义一个循环双链表
DLinkList Init_Circulate_List(){
//头结点
DNode *L=(DLinkList) malloc(sizeof (DNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
DNode *b=(DLinkList) malloc(sizeof (DNode));
b->data=3;
DNode *c=(DLinkList) malloc(sizeof (DNode));
c->data=2;
DNode *d=(DLinkList) malloc(sizeof (DNode));
d->data=1;
DNode *x=(DLinkList) malloc(sizeof (DNode));
x->data=0;
DNode *e=(DLinkList) malloc(sizeof (DNode));
e->data=1;
DNode *f=(DLinkList) malloc(sizeof (DNode));
f->data=2;
DNode *g=(DLinkList) malloc(sizeof (DNode));
g->data=3;
L->next=b;b->next=c;c->next=d;d->next=x;x->next=e;e->next=f;f->next=g;g->next=L;
L->prior=g;b->prior=L;c->prior=b;d->prior=c;x->prior=d;e->prior=x;f->prior=e;g->prior=f;
return L;
}
bool Judg_Symmetry(DLinkList &L){
//正向工作指针,逆向工作指针
DNode *p=L->next,*q=L->prior;
while (p->prior!=q&&p!=q){
if (p->data==q->data){
p=p->next;
q=q->prior;
}else{
return false;
}
}
return true;
}

/典例11[循环单链表]:两循环单链表合并//--------------------------------------/
LinkList initLinkList7(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=L;
return L;
}
LinkList initLinkList8(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=6;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=7;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=8;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=9;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=10;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=L;
return L;
}
LinkList Merge_Cri_List(LinkList &h1,LinkList &h2){
//h1、h2工作指针
LNode *p1=h1,*p2=h2;
while(p1->next!=h1){
p1=p1->next;
} //寻找h1的尾结点
p1->next=h2->next;
while(p2->next!=h2){
p2=p2->next;
}//寻找h2的尾结点
p2->next=h1;
return h1;
}

/典例12[循环单链表]:单循环链表增序输出//--------------------------------------/
LinkList initLinkList9(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=3;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=7;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=9;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=2;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=L;
return L;
}
//每次循环输出并删除单链表最小值
void Del_All(LinkList &L){
//工作指针
LNode *pre=L,*p=pre->next;
//最小值存储模块
LNode *minpre,*minp;//最小值指针
while (L->next!=L){
pre=L,p=pre->next;
minpre=L,minp=minpre->next;
while (p!=L){//将当前最小值存起来
if (minp->data>p->data){
minpre=pre;
minp=p;
}
pre=pre->next;
p=pre->next;
}
minpre->next=minp->next;
cout free(minp);
}

}

/典例13[单链表逆遍历]:找到倒数第k个结点的值//--------------------------------------/
bool Search_K(LinkList &L,int k) {
//两个工作指针
LNode *p=L->next,*q=L->next;
int count=0;
while (q!=NULL){
if (count count++;
} else{
p=p->next;//当两工作指针间隔k时,p也开始移动
}
q=q->next;
}
if (count return false;
}
cout return true;
}
//14、删除公共元素
LinkList initLinkList11(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
LinkList initLinkList22(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=0;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
LinkList initLinkList33(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=3;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=4;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=5;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
void deletecommon(LinkList &a,LinkList &b,LinkList &c){
//工作指针
LNode *pre=a,*pa=pre->next,*pb=b->next,*pc=c->next,*temp;
while(pa){
while(pa->data>pb->data){
pb=pb->next;
}
if (pa->datapb->data){
//去c里找是否存在该元素
while (pa->data>pc->data){
pc=pc->next;
}
if (pa->data
pc->data){
//bc都存在则删除
temp=pa;
pre->next=pa->next;
//删除操作已经将a前移了不用再移动了
pa=pa->next;
free(temp);
} else{
pre=pre->next;pa=pre->next;
}
} else{
pre=pre->next;pa=pre->next;
}
}
}
//15、无序去重
LinkList initLinkList10(){
//头结点
LNode *L=(LinkList) malloc(sizeof (LNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点
LNode *b=(LinkList) malloc(sizeof (LNode));
b->data=1;
LNode *c=(LinkList) malloc(sizeof (LNode));
c->data=2;
LNode *d=(LinkList) malloc(sizeof (LNode));
d->data=1;
LNode *e=(LinkList) malloc(sizeof (LNode));
e->data=3;
LNode *f=(LinkList) malloc(sizeof (LNode));
f->data=1;
L->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=NULL;
return L;
}
void deleteNode(LinkList &L){
LNode *p=L->next,*q,*pre;
q=p->next;pre=p;
while (p->next){
while (q){
if (p->dataq->data){
pre->next=q->next;
free(q);
} else{
pre=pre->next;
}
q=pre->next;
}
p=p->next;
pre=p;
q=pre->next;
}
}
//16、括号匹配
CharLinkList initCharList(){
//头结点
CharNode *str1=(CharLinkList) malloc(sizeof (CharNode));
//L->data=NULL;//头结点data不用管,只让->next=NULL;就行
//数据结点load
CharNode *a=(CharLinkList) malloc(sizeof (CharNode));
a->data=’[’;
CharNode *b=(CharLinkList) malloc(sizeof (CharNode));
b->data=’{’;
CharNode *c=(CharLinkList) malloc(sizeof (CharNode));
c->data=’(’;
CharNode *d=(CharLinkList) malloc(sizeof (CharNode));
d->data=‘1’;
CharNode *e=(CharLinkList) malloc(sizeof (CharNode));
e->data=’)’;
CharNode *f=(CharLinkList) malloc(sizeof (CharNode));
f->data=’}’;
CharNode *g=(CharLinkList) malloc(sizeof (CharNode));
g->data=’]’;
str1->next=a;a->next=b;b->next=c;c->next=d;d->next=e;e->next=f;f->next=g;g->next=str1;
return str1;
};
bool judge(CharLinkList &cl){
Sqstack sq;CharLinkList l=cl;
CharNode *q=l->next,*p;
while (q!=l){
char c=q->data;
if(c
’[’||c==’{’||c==’(’){
Push(sq,q);
}else if ((!IsEmpty(sq))&&(c==’]’||c==’}’||c==’)’)){
GetTop(sq,p);
if ((p->data==’[’&&c==’]’)||(p->data==’{’&&c==’}’)||(p->data==’(’&&c==’)’)){
Pop(sq,p);
}
}
q=q->next;
}
if (IsEmpty(sq)){
return true;
}
return false;
}

int main() {
//例6:奇、偶分别用头插、尾插(头插+尾插混合)(单链表处理)
/LinkList L=initLinkList();
print_L(L);
L_apart(L);
/
//例7:两递增归并一递减(两链表处理)
/LinkList L1=initLinkList1();
print_L(L1);
LinkList L2=initLinkList2();
print_L(L2);
LinkList L3=MergeList(L1,L2);
print_L(L3);
/
//例8:用A、B的公共元素组合成C(两链表处理)
/LinkList L3=initLinkList3();
print_L(L3);
LinkList L4=initLinkList4();
print_L(L4);
LinkList C=Create_Common3(L3,L4);
print_L©;
/
//例9:判断B是否是A的子序列
/LinkList L5=initLinkList5();
print_L(L5);
LinkList L6=initLinkList6();
print_L(L6);
bool b=Judg_Subset(L5,L6);
cout</
//例10:判断双循环链表是否是对称的
/DLinkList Dl=Init_Circulate_List();
bool b=Judg_Symmetry(Dl);
cout</
//例11:拼接两单循环链表
/LinkList L7=initLinkList7();
print_CL(L7);
LinkList L8=initLinkList8();
print_CL(L8);
LinkList L=Merge_Cri_List(L7,L8);
print_CL(L);
/
//例12:增序输出
/LinkList L9=initLinkList9();
print_CL(L9);
Del_All(L9);
/
//例13:
/LinkList L3=initLinkList3();
print_L(L3);
bool b=Search_K(L3,6);
cout< Common_char();
/
//删除公共元素
/LinkList l1=initLinkList11();
LinkList l2=initLinkList22();
LinkList l3=initLinkList33();
deletecommon(l1,l2,l3);
print_L(l1);
/
//无序去重
/* LinkList l1=initLinkList10();
print_L(l1);
deleteNode(l1);
print_L(l1);*/
//括号匹配
CharLinkList l=initCharList();
bool b=judge(l);
if (b){
cout<<“a”< } else{
cout<<“b”< }

}


推荐阅读
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
author-avatar
Rockets马丁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有