zoukankan      html  css  js  c++  java
  • 数据结构期末考试复习--2

    算法设计题--2

    six

    顺序表中实现二分查找

    struct record
    {
    	int key;
    	int others;
    };
    int bisearch(struct record r[],int k)
    {
    	int low = 0,mid,high = n-1;
    	while(low<=high)
    	{
    		mid(low+high)/2;
    		if(r[mid].key==k) return (mid+1);
    		else if(r[mid].key>k) high = mid-1;
    		else low = mid+1;
    	}
    	return 0;
    }
    

    判断二叉树是否为二叉排序树

    int minnum = -32768,flag = 1;
    typedef struct node
    {
    	int key;
    	struct node *lchild,*rchild;
    }bitree;
    void inoeder(bitree *bt)
    {
    	if(bt!=0)
    	{
    		inoeder(bt->lchild);
    		if(minnum>bt->key) flag = 0;
    		minnum = bt->key;
    		inoeder(bt->rchild);
    	}
    
    }
    

    链式结构上直接插入排序

    void straightinsertsort(lklist *&head)
    {
    	lklist *s,*p,*q;
    	int t;
    	if(head==0||head->next==0) return;
    	else for(q=head,p=head->next;p!=0;p=q->next)
    	{
    		for(s=head;s!=q->next;s=s->next) if(s->data>p->data) break;
    		if(s==q->next) q=p;
    		else{
    			q->next=p->next;
    			p->next=s->next;
    			s->next=p;
    			t=p->data;
    			p->data=s->data;
    			s->data=t;
    		}
    	}
    }
    

    seven

    链式结构实现简单选择排序

    void simpleselectsorlklist(lklist *&head)
    {
    	lklist *p,*q,*s;
    	int min,t;
    	if(head==0||head->next==0) return;
    	for(q=head;q!=0;q=q->next)
    	{
    		min=q->data;
    		s=q;
    		for(p=q->next;p!=0;p->p->next)
    			if(min>p->data){
    				min = p->data;
    				s=p;
    			}
    		if(s!=q)
    		{
    			t=s->data;
    			s->data=q->data;
    			q->data=t;
    		}
    	}
    }
    

    顺序表上实现求子串的算法

    void substring(char s[],long start,long count,char t[])
    {
    	long i,j,length = strlen(s);
    	if(start<1||start>length) cout<<"error
    ";
    	else if(start+count-1>length) cout<<"error
    "
    	else{
    		for (i=start-1,j=0;i<start+cout-1;i++,j++)
    		{
    			t[j]=s[i];
    			t[j]='';
    		}
    	}
    }
    

    求节点在二叉排序树中层次的算法

    int lev=0;
    typedef struct node
    {
    	int key;
    	struct node *lchild,*rchild;
    }bitree;
    
    void level(bitree *bt,int x)
    {
    	if(bt!=0)
    	{
    		lev++;
    		if(bt->key==x) return;
    		else if(bt->key>x) level(bt->lchild,x);
    		else level(bt->rchild,x);
    	}
    }
    

    eight

    求链式结构上二叉树节点个数

    void countnode(bitree *bt,int &count)
    {
    	if(bt!=0)
    	{
    		count++;
    		countnode(bt->lchild,count);
    		countnode(bt->rchild,count);
    	}
    }
    

    设计将无向图的邻接矩阵变为邻接表的算法

    typedef struct
    {
    	int vertex[m];
    	int edge[m][m];
    }gadjmatix;
    typedef struct node1
    {
    	int info;
    	int adjvertex;
    	struct node1 *nextarc;
    }glinklisnode;
    typedef struct node2
    {
    	int vertexinfo;
    	glinklisnode *firstarc;
    }glinkheadnode;
    
    void adjmatrixtoadilist(gadjmatix g1[],glinkheadnode g2[])
    {
    	int i,j;
    	glinklisnode *p;
    	for(i=0;i<=n;i++)
    	{
    		g2[i].firstarc=0;
    	}
    	for(i=0;i<=n;i++)
    	{
    		for(j=0;j<=n-1;j++)
    		{
    			if(g1.edge[i][j]==1)
    			{
    				p=(glinklisnode *)malloc(sizeof(glinklisnode));
    				p->adjvertex=j;
    				p->nextarc=g[i].firstarc;
    				g[i].firstarc=p;
    				p=(glinklisnode *)malloc(sizeof(glinklisnode));
    				p->adjvertex=i;
    				p->next=g[i].firstarc;
    				g[i].firstarc=p;
    			}
    		}
    	}
    }
    

    nine

    求二叉树上所有节点之和

    void sum(bitree *bt,int &s)
    {
    	if(bt!=0)
    	{
    		s=s+bt->data;
    		sum(bt->lchild,s);
    		sum(bt->rchild,s);
    	}
    }
    

    设计将所有奇数移到偶数之前的算法

    void quickpss(int r[],int s,int t)
    {
    	while(i<j)
    	{
    		while(i<j&&r[j]%2==0) j=j-1;
    		if(i<j)
    		{
    			r[i]=r[j];
    			i=i+1;
    		}
    		while(i<j&&r[j]%2!=0) i=i+1;
    		{
    			if(i<j)
    			{
    				r[j]=r[i];
    				j=j-1;
    			}
    		}
    	}
    }
    

    判断链表是否递增

    int isriselk(lklist *head)
    {
    	if(head==0||head->next==0)
    	{
    		return 1;
    	}else{
    		for(q=head,p=head->next;p!=0;q=p,p=p->next)
    		{
    			if(q->data>p->data)
    				return 0;
    		}
    	}
    	return 1;
    }
    

    ten

    链式结构上合并排序

    void mergelklist(lklist *ha,lklist *hb,lklist *&hc)
    {
    	lklist *s = hc = 0;
    	while(ha!=0&&hb!=0)
    	{
    		if(ha->data<hb->data)
    		{
    			if(s==0) hc=s=ha;
    			else{
    				s->next = ha;
    				ha=ha->next;
    			}
    		}else{
    			f(s==0) hc=s=hb;
    			else{
    				s->next = hb;
    				hb=hb->next;
    			}
    		}
    	}
    	if(ha==0){
    		s->next = hb;
    	}else{
    		s->next=ha;
    	}
    }
    

    二叉排序树上查找节点 x

    bitree *bisearch(bitree *t,int key)
    {
    	bitree *p = t;
    	while(p!=0)
    	{
    		if(p->key==key) return p;
    		else if(p->key>key) p=p->lchild;
    		else p=p->rchild;
    	}
    	return 0;
    }
    

    设计算法将关键序列调整为堆

    void adjustheap(int r[],int n)
    {
    	int j=n,i=j/2;temp=r[j-1];
    	while(i>=1)
    		if(temp>=r[i-1]) break;
    		else{
    			r[j-1]=r[i-1];
    			j=i;
    			i=i/2;
    		}
    		r[j-1]=temp;
    }
    
  • 相关阅读:
    用户自定义控件的嵌套问题
    ASP.NET进阶:调用Javascript
    [网络收集]FCKeditor配置和精简【附源码】
    检查session判断用户是否退出登录
    Server.Transfer VS Response.Redirect
    asp.net下ckeditor3.0.1和ckfinder_aspnet_1.4.1.1的配置方法
    Sudoku(数独)
    转自:蓝色污点的专栏
    LETTERS(字母)
    放苹果
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12149858.html
Copyright © 2011-2022 走看看