数据结构 单链表应用:回溯法求幂集

来源:互联网 发布:pdfexpert mac破解版 编辑:程序博客网 时间:2024/06/05 03:40
#include <stdio.h>#include <stdlib.h>#include <iostream.h>#define OK          1#define ERROR       0#define OVERFLOW    -2typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode, *LinkList;void CreateList_L(LinkList &L, int n){int i;LinkList p,q;L = (LinkList) malloc (sizeof(LNode));if (!L){exit(OVERFLOW);}p = L;for (i=0; i<n; i++){q = (LinkList) malloc (sizeof(LNode));if (!q){exit(OVERFLOW);}q->data = i+1;p->next = q;p = q;}p->next = NULL;}void Display(LinkList L){LinkList p = L->next;while (p != NULL){printf("%d ",p->data);p = p->next;}printf("\n");}int Listlength(LinkList L){LinkList p = L->next;int n = 0;while (p!=NULL){n++;p = p->next;}return n;}int ListInsert_L(LinkList &L, int i, ElemType e){LinkList s,p = L;int j = 0;while (p && j<i-1){p = p->next;++j;}if (!p || j>i-1){return ERROR;}s = (LinkList) malloc (sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return OK;}int ListDelete_L(LinkList &L, int i, ElemType &e){LinkList p = L,q;int j = 0;while (p->next && j<i-1){p = p->next;++j;}if (!(p->next) || j>i-1){return ERROR;}q = p->next;p->next = q->next ;e = q->data ;free(q);return OK;}int GetElem_L(LinkList L, int i, ElemType &e){LinkList p = L->next;int j = 1;while (p && j<i){p = p->next;j++;}if (!p || j>i){return ERROR;}e = p->data;return OK;}void GetPowerset(int i, LinkList A,LinkList &B){int x,k;if (i>Listlength(A)){Display(B);}else{GetElem_L(A,i,x);k = Listlength(B);ListInsert_L(B,k+1,x);GetPowerset(i+1,A,B);ListDelete_L(B,k+1,x);GetPowerset(i+1,A,B);}}int main(){int i = 1;LinkList A,B;B = (LinkList) malloc (sizeof(LNode));B->next = NULL;CreateList_L(A,8);GetPowerset(i,A,B);return 0;}

0 0
原创粉丝点击