1、数据结构程序十进制转化为二进制#includemain() int n,i,a80,t; i=0; printf(输入一个十进制数n); scanf(%d,&n); do ai=n%2; n=n/2; i+; while(n!=0); t=i; for(i=t-1;i=0;i-) printf(%d,ai); return 0;二叉树#include#include#define MAX 20typedef struct BTNode /*节点结构声明*/ char data ; /*节点数据*/ struct BTNode *lchild; struct BTNode *rchild ; /
2、*指针*/*BiTree;void createBiTree(BiTree *t) /* 先序遍历创建二叉树*/ char s; BiTree q; printf(nplease input data:(exit for #); s=getche(); if(s=#)*t=NULL; return; q=(BiTree)malloc(sizeof(struct BTNode); if(q=NULL)printf(Memory alloc failure!); exit(0); q-data=s; *t=q; createBiTree(&q-lchild); /*递归建立左子树*/ create
3、BiTree(&q-rchild); /*递归建立右子树*/void PreOrder(BiTree p) /* 先序遍历二叉树*/ if ( p!= NULL ) printf(%c, p-data); PreOrder( p-lchild ) ; PreOrder( p-rchild) ; void InOrder(BiTree p) /* 中序遍历二叉树*/ if( p!= NULL ) InOrder( p-lchild ) ; printf(%c, p-data); InOrder( p-rchild) ; void PostOrder(BiTree p) /* 后序遍历二叉树*/
4、if ( p!= NULL ) PostOrder( p-lchild ) ; PostOrder( p-rchild) ; printf(%c, p-data); void Preorder_n(BiTree p) /*先序遍历的非递归算法*/ BiTree stackMAX,q; int top=0,i; for(i=0;idata); if(q-rchild!=NULL) stacktop+=q-rchild; if(q-lchild!=NULL) q=q-lchild; else if(top0) q=stack-top; else q=NULL; void release(BiTre
5、e t) /*释放二叉树空间*/ if(t!=NULL) release(t-lchild); release(t-rchild); free(t); int main() BiTree t=NULL; createBiTree(&t); printf(nnPreOrder the tree is:); PreOrder(t); printf(nnInOrder the tree is:); InOrder(t); printf(nnPostOrder the tree is:); PostOrder(t); printf(nn先序遍历序列(非递归):); Preorder_n(t); rel
6、ease(t); return 0; 运行程序输入:ABC#DE#G#F#运行结果:ABCDEGF蛇形填数#include/因为最先竖着赋值,而核心代码里面最初的i在变,所以i代表行。 int main() int a2020; int i,j,n,tot=0; printf(输入一个10进制数(20以内)n); scanf(%d,&n); for(i=0;i20;i+)/使每个数组元素都写上0以便赋值用作判断该元素是否已经赋过值了 for(j=0;j20;j+) aij=0; j=n-1; i=-1;/使要赋的值时a+ij的位置指向右上角。 while(totn*n) while(i+10;
7、 a+ij=+tot; /或者出界时停止竖着赋值。即跳出这个循环。 while(j-1=0&!aij-1)/开始倒退着赋值。/不过感觉这里应该是j-1=0才对 ai-j=+tot; while(i-1=0&!ai-1j) a-ij=+tot; while(j+1n&!aij+1) ai+j=+tot; for(i=0;in;i+) for(j=0;jn;j+) printf(%d ,aij); printf(n); return 0;单链表的插入删除/*修改于2012.4.1218:42目的:实现对单链表的基本操作如查找,删除,添加 */ #include #include /* 给 char
8、 类型定义别名 datatype */typedef char datatype; /* 定义链表节点类型 */typedef struct node datatype data; struct node *next;linklist; /* 函数声明部分 */linklist* CreatList();linklist* Get(linklist*, int);linklist* Locate(linklist*, datatype);void PrintList(linklist*);void InsertAfter(linklist*, datatype);void InsertBefo
9、re(linklist*, int, datatype);void DeleteAfter(linklist*);void Deleter(linklist*, int);void FreeList(linklist*); int main() int pos; datatype value; printf(*进入输入演示*n); /* 测试创建链表函数 */ printf(请输入一串字符,以 0 结束n); linklist *head, *p; head = CreatList(); /* 测试打印链表函数 */ printf(n你所输入的链表为:n); PrintList(head);
10、/* 测试按序号查找函数 */ printf(*进入查找演示*n); printf(n请输入要查找的节点序号:n); scanf(%d, &pos); getchar(); p = Get(head, pos); if(p != NULL) printf(%cn, p - data); else printf(Cant Get This Key!n); /* 测试按值查找函数 */ / printf(n请输入要查找的值:n); /scanf(%c, &value); / p = Locate(head, value); / if(p != NULL) / / printf(%cn, p - d
11、ata); / / else / / printf(Cant Get This Key!n); / /* 测试插入节点函数 */ printf(*进入插入演示*n); printf(n你想在第几个节点前插入?n); scanf(%d, &pos); getchar(); printf(请输入要插入的值n); scanf(%c, &value); InsertBefore(head, pos, value); PrintList(head); /* 测试删除节点函数 */ printf(*进入删除演示*n); printf(n你想删除第几个节点?n); scanf(%d, &pos); Dele
12、ter(head, pos); PrintList(head); /* 销毁链表 */ FreeList(head); system(pause); return 0; /* 带头结点后插法创建链表函数 */linklist* CreatList() datatype key; /* head 为头指针, s 为新节点, r 为尾指针 */ linklist *head, *s, *r; head = (linklist*) malloc(sizeof(linklist); r = head; key = getchar(); /* 遇到 $ 就停止创建 */ while(key != 0)
13、s = (linklist*) malloc(sizeof(linklist); s - data = key; /* 新节点插入表尾 */ r - next = s; /* 尾指针指向新的表尾 */ r = s; key = getchar(); r - next = NULL; /* 返回头指针 */ return head; /* 打印链表函数 */void PrintList(linklist* head) linklist *p; p = head - next; while(p != NULL) printf(%c, p - data); p = p - next; printf(
14、n); /* 查找链表中第 i 个节点 */linklist* Get(linklist* head, int i) /* j 为扫描计数器 */ int j = 0; linklist *p; /* p 指向头节点 */ p = head; /* 到达表尾或序号不合法就退出循环 */ while(p - next != NULL) & (j next; j+; if (i = j) return p; else return NULL; /* 在链表中查找值 key 并返回所在节点 */linklist* Locate(linklist* head, datatype key) linkli
15、st *p; /* p 指向开始结点 */ p = head - next; while(p != NULL) if(p - data != key) p = p - next; else break; return p; /* 在节点 p 后插入 key */void InsertAfter(linklist* p, datatype key) linklist *s; s = (linklist*) malloc(sizeof(linklist); s - data = key; /* 先将 s 指向后一个节点,再将前一个节点指向 s */ s - next = p - next; p -
16、 next = s; /* 将 key 插入链表第 i 个节点之前 */void InsertBefore(linklist* head, int i, datatype key) linklist *p; int j = i - 1; /* 找到第 i-1 个节点 p */ p = Get(head, j); if (p = NULL) printf(Insert Error!n); else /* 将 key 插入节点 p 之后 */ InsertAfter(p, key); /* 删除 p 节点的后继节点 */void DeleteAfter(linklist* p) linklist
17、*r; /* r 指向要删除的节点 */ r = p - next; /* 将 p 直接与 r 下一个节点链接 */ p - next = r - next; /* 释放节点 r */ free(r); /* 删除链表的第 i 个节点 */void Deleter(linklist* head, int i) linklist *p; int j = i - 1; /* 找到第 i-1 个节点 p */ p = Get(head, j); if (p != NULL) & (p - next != NULL) /* 删除 p 的后继节点 */ DeleteAfter(p); else prin
18、tf(Delete Error!n); /* 递归释放单链表 */void FreeList(linklist* p) if (p - next != NULL) FreeList(p - next); free(p);链表的插入/ListInsert_L.cpp/This program is to insert a element into the LNode# include # include # include # include # define INIT_LENGTH 10# define OK 1# define ERROR 0typedef struct LNode /def
19、ine LNode structure int data; struct LNode *next;LNode,*Linklist;int ListInsert_L(Linklist &L,int i,int e) /ListInsert_L() sub-function LNode *p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) /out of location coutErrer! The location is illegal!data=e; s-next=p-next; p-next=s; return (OK); /ListInsert_L(
20、) endint main() /main() function int i,j,e; LNode node10; LNode *L,*p; int arrayINIT_LENGTH+1=5,8,12,18,25,30,37,46,51,89; L=node; L=(Linklist)malloc(sizeof(LNode); L-next=NULL; for (i=10;i0;i-) p=(Linklist)malloc(sizeof(LNode); p-data=arrayi-1; p-next=L-next; L-next=p; p=L; coutendlendlListInsert_L.cpp; coutendl=; cout endlendlThe old LNode is : ; for(i=0;inext; coutdata ; coutendlendlj; coute; if(ListInsert_L(L,j,e) cout endlThe new LNode is : ; p=L; for(i=0;inext; coutdata ; coutendlendl.OK!.; getch();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1