数据结构与算法代码(数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考)

2024-01-11 11:40:03 :30

数据结构与算法代码(数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考)

“数据结构与算法代码”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看数据结构与算法代码(数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考)!

本文目录

数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考

1、采用遍历二叉树的思想,具体算法思路为(设在树根为root的二叉树中检索值为key的结点):(1)如果树root为NULL,返回NULL;(2)如果树root的根结点的值为key,返回root;(3)在左子树中检索,得到检索结果pnode;如果pnode不空则返回pnode;否则继续在右子树中检索,得到检索结果pnode,并返回pnode;设BitNode为二叉树结点结构,BitTree为二叉树类型,dataType为结点中item域的数据类型,则检索算法Search如下:BitNode* Search(BitTree *root, dataType key) { BitNode *pnode; if(root == NULL) return NULL; if(root-》item == key) return root; pnode = Search(root-》lchild, key); if(pnode) return pnode; pnode = Search(root-》rchild, key); return pnode;} 2、把表看成两部分list和list1,其中list是有序表,初始化为只有首元素结点的链表,list1是无序部分,初始化为去掉首元素后剩下的部分。每次从list1中取出第一个元素插入到list的适当位置,使list有序,直到list1为空表时为止。void InsertSort(LinkList* list) {//list是个带表头结点的单链表 LinkList *list1; //list1为无序部分(不带头结点) Node *p, *q, *r; //插入时,插入到p和q之间,r为从list1中取到的首结点。 if(list-》next == NULL) return; //空表无需排序 list1 = list-》next-》next; list-》next-》next = NULL; //将list初始化为只有单首元结点的表 while(list1 != NULL) { r = list1; list1 = list1-》next; p = list; q = p-》next; while(q != NULL && q-》data 《 r-》data) { p = q; q = p-》next; } r-》next = q; p-》next = r; }} 3、把表看成两部分list和list1,其中list是有序表,初始化为空表,list1是无序部分,初始化为原表。每次从list1中取出值为最小的元素插入到list的末尾,使list有序,直到list1为空表时为止。void SelectSort(LinkList *list) { LinkList list1; //list1为无序表部分,带表头结点,list1为表头结点; Node *p, *q, *pre, *min, *last; //q是对list1进行扫描用的指针,p为q的前驱,last指向有序表的表尾。 if(list-》next == NULL) return; //空表无需排序 list1.next = list-》next; //list为指针类型,list1为普通变量类型,所以访问成员的方式不一样。 last = list; while(list1.next != NULL) {//当无序表不空时 pre = &list1 min = pre-》next; p = min; q = p-》next; while(q != NULL) { if(q-》data 《 min-》data) { pre = p; min = q; } p = q; q = p-》next; } pre-》next = min-》next; //在list1中删去min last-》next = min; //将min插入到有序表的末尾 last = min; //将刚插入的元素作为新的表尾 } last-》next = NULL;}

刚学数据结构,题目不会,给个代码(算法)参考

1#include "stdio.h" #define MAXSIZE 32 typedef char datatype; typedef struct _Node{ datatype data; _Node *lchild, *rchild;}Node, *PNode, *PBitTree; void visit(PNode node){ printf("%c\t", node-》data);} (1)void PreOrder(PBitTree root){ if(!root) return; visit(root); PreOrder(root-》lchild); PreOrder(root-》rchild);} void InOrder(PBitTree root){ if(!root) return; InOrder(root-》lchild); visit(root); InOrder(root-》rchild);} void PostOrder(PBitTree root){ if(!root) return; PostOrder(root-》lchild); PostOrder(root-》rchild); visit(root);} (2)void Display(PBitTree root){ PNode nodeQueue; /*结点队列*/ int levelQueue; /*用于保存结点层次信息的队列*/ int front=0, rear=0, curlevel = 0, bline = 0; /*bline用于判断是否需要换行*/ PNode p = root; if(p) { /*根结点入队*/ nodeQueue = p; levelQueue = 0; rear = (rear + 1) % MAXSIZE; } while(front != rear) { /*如果队列不空*/ p = nodeQueue; /*获取队首元素*/ bline = levelQueue != curlevel ? 1 : 0; /*判断是否需要换行*/ curlevel = levelQueue; front = (front + 1) % MAXSIZE; /*出队*/ if(bline) printf("\n"); /*如果需要换行,则输出换行符*/ visit(p); if(p-》lchild) { /*如果左孩子不空,将左孩子入队*/ nodeQueue = p-》lchild; levelQueue = curlevel + 1; rear = (rear + 1) % MAXSIZE; if(p-》rchild) { /*如果右孩子不空,将右孩子入队*/ nodeQueue = p-》rchild; levelQueue = curlevel + 1; rear = (rear + 1) % MAXSIZE; } }} (3)void Exchange(PBitTree root) { if(!root) return; PNode tmp; Exchange(root-》lchild); Exchange(root-》rchild); tmp = root-》lchild; root-》lchild = root-》rchild; root-》rchild = tmp;} 2typedef char datatype; typedef struct _listNode{ datatype data; _listNode *next;}RQueueNode, *PRQueueNode, *PRQueue; PRQueue rear; void InitRQueue( ) { /*初始化队列*/ rear = (PRQueue) malloc(sizeof(RQueueNode)); /*生成附加头结点*/ rear-》next = rear; /*设置为循环的空队*/} void EnRQueue(datatype x) { /*入队*/ PRQueueNode *newNode; newNode = (PRQueue) malloc(sizeof(RQueueNode)); //生成新结点 newNode-》data = x; newNode-》next = rear-》next; /*将新结点链接到队尾*/ rear-》next = newNode; rear = newNode; /*将新结点作为新的队尾*/} datatype DeRQueue( ) { /*出队*/ PRQueueNode *front; /*队首指针*/ datatype tmp; /*用于返回队首元素数据*/ assert(rear-》next != rear); /*断言队列不空*/ front = rear-》next-》next; rear-》next-》next = front-》next; if(rear == front) rear = rear-》next; /*如果出队的是队列中的最后一个结点*/ tmp = front-》data; free(front); return tmp;}

求大神 帮忙补一段c语言数据结构与算法考试的代码 有标注帮帮忙 急急急考试中

#include#include#defineNEW(LB*)malloc(sizeof(LB))typedefstructLianb{intdata;structLianb*next;}LB;//创建链表结构体LB*chuangjian(intn){LB*Head,*p;Head=p=NEW;for(inti=0;idata);p-》next=NEW;p=p-》next;}p=0;returnHead;}//创建链表voidxianshi(LB*Head,intn){printf("head-》");LB*p=Head;for(inti=0;i",p-》data);p=p-》next;}printf("end\n");}//显示链表LB*chazhao(LB*Head,intn){LB*p=Head;if(p!=0){for(inti=0;inext;}}else{printf("链表长度不足\n");}returnp;}//查找LB*shanchu(LB*Head,intn){LB*p=chazhao(Head,n-1);p-》next=p-》next-》next;returnHead;}//删除intmain(){LB*head;head=chuangjian(5);//创建链表xianshi(head,5);//显示链表shanchu(head,3);xianshi(head,4);//显示插入后新链表free(head);return0;}

数据结构与算法实验代码

#include 《cstdio》int gold;int list;int fir = 0;//用来判断是否是第一个元素用的 void printresult(int check_number,int n);int main(){int n,m;scanf("%d%d",&n,&m);for(int i = 0;i 《 n;i++)scanf("%d%d%d",&gold);for(int i = 0;i 《 m;i++){int check_number;scanf("%d",✓_number);printresult(check_number,n);}printf("\n");return 0;}void printresult(int check_number,int n){for(int i = 0;i 《 n;i++){if(gold)list++;}int result = ++list;//这里还要多加一个1,因为数组原来是0 int num = 1;for(int i = 0;i 《 n;i++){if(medal)list++;}list++;double gold_per = gold;for(int i = 0;i 《 n;i++){if((gold)》gold_per)list++;}list++;double medal_per = medal;for(int i = 0;i 《 n;i++){if(medal》medal_per)list++;}list++;for(int i = 1;i 《 5;i++){if(list《result){result = list;num = i;}}for(int i = 1;i 《 5;i++)list = 0;//对排名数组清零,因为之后要多次调用 if(!fir){printf("%d:%d",result,num);//首个输入前面不用空格 fir = 1;}elseprintf(" %d:%d",result,num);}//如果超时的话还可以再优化,不过国家的数量比较少,应该不会//优化就是把排名是1的话直接输出,不进行之后运算

数据结构算法代码

我感觉你很有必要把这段代码好好的整理、规范下。。。typedefcharListItem;typedefstructnode*link;typedefstructnode{ ListItemelement; linknext;}Node;typedefstructllist*List;typedefstructllist{ linkfirst;}Llist;估计到后面,你都弄不清楚,这里面的哪个是哪个了吧。把这段整理清楚之后,出了问题也就很容易找了。。

C语言编写数据结构查找算法

实验五 查找的实现 一、 实验目的1.通过实验掌握查找的基本概念;2.掌握顺序查找算法与实现;3.掌握折半查找算法与实现。二、 实验要求1. 认真阅读和掌握本实验的参考程序。2. 保存程序的运行结果,并结合程序进行分析。三、 实验内容1、建立一个线性表,对表中数据元素存放的先后次序没有任何要求。输入待查数据元素的关键字进行查找。为了简化算法,数据元素只含一个整型关键字字段,数据元素的其余数据部分忽略不考虑。建议采用前哨的作用,以提高查找效率。2、查找表的存储结构为有序表,输入待查数据元素的关键字利用折半查找方法进行查找。此程序中要求对整型量关键字数据的输入按从小到大排序输入。一、顺序查找顺序查找代码:#include"stdio.h"#include"stdlib.h"typedef struct node{ intkey;}keynode;typedef struct Node{ keynoder; intlength;}list,*sqlist;int Createsqlist(sqlist s){ inti; printf("请输入您要输入的数据的个数:\n"); scanf("%d",&(s-》length)); printf("请输入您想输入的%d个数据;\n\n",s-》length); for(i=0;i《s-》length;i++) scanf("%d",&(s-》r.key)); printf("\n"); printf("您所输入的数据为:\n\n"); for(i=0;i《s-》length;i++) printf("%-5d",s-》r.key); printf("\n\n"); return1;}int searchsqlist(sqlist s,int k){ inti=0; s-》r.key=k; while(s-》r.key!=k) { i++; } if(i==s-》length) { printf("该表中没有您要查找的数据!\n"); return-1; } else returni+1;}sqlist Initlist(void){ sqlistp; p=(sqlist)malloc(sizeof(list)); if(p) returnp; else returnNULL;}main(){ intkeyplace,keynum;// sqlistT;// T=Initlist(); Createsqlist(T); printf("请输入您想要查找的数据的关键字:\n\n"); scanf("%d",&keynum); printf("\n"); keyplace=searchsqlist(T,keynum); printf("您要查找的数据的位置为:\n\n%d\n\n",keyplace); return2;}顺序查找的运行结果:二、折半查找折半查找代码:#include"stdio.h"#include"stdlib.h"typedef struct node{ intkey;}keynode;typedef struct Node{ keynoder; intlength;}list,*sqlist;int Createsqlist(sqlist s){ inti; printf("请输入您要输入的数据的个数:\n"); scanf("%d",&(s-》length)); printf("请由大到小输入%d个您想输入的个数据;\n\n",s-》length); for(i=0;i《s-》length;i++) scanf("%d",&(s-》r.key)); printf("\n"); printf("您所输入的数据为:\n\n"); for(i=0;i《s-》length;i++) printf("%-5d",s-》r.key); printf("\n\n"); return1;}int searchsqlist(sqlist s,int k){ intlow,mid,high; low=0; high=s-》length-1; while(low《=high) { mid=(low+high)/2; if(s-》r.key==k) returnmid+1; elseif(s-》r.key》k) high=mid-1; else low=mid+1; } printf("该表中没有您要查找的数据!\n"); return-1;}sqlist Initlist(void){ sqlistp; p=(sqlist)malloc(sizeof(list)); if(p) returnp; else returnNULL;}main(){ intkeyplace,keynum;// sqlistT;// T=Initlist(); Createsqlist(T); printf("请输入您想要查找的数据的关键字:\n\n"); scanf("%d",&keynum); printf("\n"); keyplace=searchsqlist(T,keynum); printf("您要查找的数据的位置为:\n\n%d\n\n",keyplace); return2;}折半查找运行结果:三、实验总结: 该实验使用了两种查找数据的方法(顺序查找和折半查找),这两种方法的不同之处在于查找方式和过程不同,线性表的创建完全相同,程序较短,结果也一目了然。

数据结构,题目不会,希望能给代码(算法)参考,谢谢

1typedef char datatype;typedef struct _listnode{ datatype data; _listnode *next;}ListNode, *PListNode, *PList, , PList list; /*单链表头指针*/ void InitList( ) { list = (PList) malloc ( sizeof ( ListNode ) ); assert(list); list-》next = NULL;} void ReversedDisplay( ) { PListNode stack; /* 栈的容量要保证大于链表的长度 */ int top = -1; PListNode p = list-》next; while(p != NULL) { /* 当还没有到达表尾时 */ stack = p; /* 进栈 */ p = p-》next; } while(top 》 -1) { /* 当栈不空时 */ p = stack; /* 出栈 */ printf("%c\t", p-》data); }} 2/*设datatype为顺序双栈元素数据类型,DStack为顺序双栈,m为其容量, top初始化为m。*/ #define m 64 typedef char datatype;datatype DStack;int top;int bottom; void InitStack( ) { top = -1; top = m; bottom =-1; bottom = m;} void Push(int i, datatype x) { assert(top); /* 断言栈不满 */ assert(i 》 0 && i 《 3); /* 断言i的合法性 */ i == 1 ? top--; /* i等于1为栈1,等于2(或者说不等于1)时为栈2 */ DStack = x;} datatype Pop(int i) { datatype tmp; assert(top); /*断言i栈不空*/ assert(i 》 0 && i 《 3); tmp = DStack; i == i ? top++; return tmp;}

数据结构,算法与应用 ---C++语言描述(代码与习题答案)

#include《stdio.h》#include《string.h》#include《stdlib.h》#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int status;#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{ int *elem; int length; int listsize;}sqlist;int flag=0;status initlist(sqlist *l){ l-》elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(!l-》elem)exit(OVERFLOW); l-》length=0; l-》listsize=LIST_INIT_SIZE; return OK;}status listinsert(sqlist *l,int i,int e){ int *newbase,*q,*p; if(i《1||i》l-》length+1)return ERROR; if(l-》length》=l-》listsize) { newbase=(int*)realloc(l-》elem,(l-》listsize+LISTINCREMENT)*sizeof(int)); if(newbase)exit(OVERFLOW); l-》elem=newbase; l-》listsize+=LISTINCREMENT; } q=&(l-》elem); for(p=&(l-》elem);p》=q;--p) { *(p+1)=*p; } *q=e; ++l-》length; return OK;}void listprint(sqlist *l){ int i; for(i=0;i《l-》length;i++) { printf("%-5d",l-》elem); }}status listdelete(sqlist *l,int i,int *e){ int *p,*q; if((i《1)||(i》l-》length))return ERROR; p=&(l-》elem); e=*p; q=l-》elem+l-》length-1; for(++p;p《=q;++p)*(p-1)=*p; --l-》length; return OK;}status getelem(sqlist *l,int i,int *e){ if((i《1)||(i》l-》length))return ERROR; *e=l-》elem; return OK;}int meun(){ int a; printf("*************************\n"); printf("* 1 InitList *\n"); printf("* 2 ListInsert *\n"); printf("* 3 ListPrint *\n"); printf("* 4 Delete *\n"); printf("* 5 Getelem *\n"); printf("* 6 Exit *\n"); printf("*************************\n"); fflush(stdin); do { printf("qing xuan ze:\n"); scanf("%d",&a); }while(!(a》=1&&a《=6)); return a;}void main(){ sqlist l,*p; int x,i,e,result; p=&l do { clrscr(); x=meun(); switch(x) { case 1: initlist(p); flag=1; printf("initlist succes!press enter contiue"); getch(); break; case 2: if(flag==0) { printf("you must initlist first!please select!"); getch(); break; } fflush(stdin); printf("\n please input i and e:"); scanf("%d%d",&i,&e); result=listinsert(p,i,e); if(result==ERROR) printf("error:i out of rang!press enter continue"); else printf("insert completed!please enter continue"); getch(); break; case 3: printf("sqlist:\n"); listprint(p); getch(); break; case 4: printf("\n please input i:"); scanf("%d",&i); result=listdelete(p,i,&e); if(result==ERROR) printf("error:i out of rang!press enter continue"); else printf("delete completed!please enter continue"); getch(); break; case 5: printf("\n please input i:\n"); scanf("%d,&i"); result=getelem(p,i,&e); if(result==ERROR) printf("error:i out of rang!press enter continue"); else printf("completed:%d",e); getch(); break; case 6: printf("bye\n"); getch(); exit(0); } }while(1);}

GitHub Python项目推荐|数据结构和算法必知必会的50个代码实现

标星(star) :8860

拷贝(fork) :2644

贡献人数 :98 (贡献人数很多哈)

仓库大小 :1 MB

最后更新 :2019-08-17

代码提交活跃

主要语言:Python

语言比例:Python:15.12%、C:14.77%、C++:13.48%、Scala:9.96%、Go:7.49%、Java:6.95%、JavaScript:6.07%、PHP:5.71%、Rust:5.41%、C#:4.21%、TypeScript:3.95%、Objective-C:2.83%、Swift:2.39%、Kotlin:1.49%、HTML:0.16%、Shell:0.00%

数据结构和算法必知必会的50个代码实现 ,内容包括

数组

链表

队列

递归

排序

二分查找

散列表

字符串

二叉树

回溯

分治

动态规划

***隐藏网址***

以上就是我们为大家找到的有关“数据结构与算法代码(数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

数据结构与算法代码(数据结构算法设计问题,还不太会,哪位能给出具体代码(算法)参考)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.