19 软专

带头结点的双向循环链表L(a1,a2,…,an)转化为L2(a1,a3,…,an,…,a4,a2)。

typedef struct Node
{
   int data;
   struct Node *left,*right;
}*list;
void build(list head)//尾插法构建双向链表
{
	int a[7]={1,2,3,4,5,6,7};
	list tail,p;
	tail=head;
	head->right=NULL;
	for(int i=0;i<7;i++)
	{
		list p=(list)malloc(sizeof(Node));
		p->data=a[i];
		p->right=tail->right;
		tail->right=p;
		p->left=tail;
		tail=p;
	}
	tail->right=head;
	head->left=tail;
}
void change(list head)
{
	list tail=head->left;//尾结点指针
	int num=1;//奇偶计数
	list p=head->right;//p指向第一个非头结点
	while(p!=tail)
	{
		if(num%2==0)
		{
			list cur=p;
			p=p->right;
			cur->left->right=p; //当前结点的前驱结点链接到当前节点后继
			p->left=cur->left;//当前节点后继结点链接到当前结点前驱
			cur->right=tail->right;//当前结点插入到表尾
			tail->right->left=cur;
			tail->right=cur;
			cur->left=tail;
		}
		else
			p=p->right;

		num++;
	}

}

输出无向无权连通图以v为顶点的最短路径长度为k的所有结点。

typedef struct arcnode
{
    int adjvex;
	struct arcnode *next;
};
typedef struct Vnode
{
	int data;
	struct arcnode *firstarc;
}Vnode;
typedef struct graph
{
	Vnode adjlist[maxsize];
	int n,e;
}graph;
void BFS(graph g,int v,int k)//搜索以v为顶点长度为k的结点
{
	int queue[maxsize];
	int visit[maxsize]={0};
	int len[maxsize];
	int front=0,rear=0;
	queue[rear++]=v;
	visit[v]=1;
	len[v]=0;//每个点的路径长度
	int level;//记录层次
	while(front!=rear)
	{
		int p=queue[front--];
		if(len[p]==k)
			printf("%d ",p);
		arcnode *temp=g.adjlist[p].firstarc;//取第一个邻接点
		level=len[p];
		while(temp!=NULL)
		{
			if(visit[temp->adjvex]==0)
			{
				queue[rear++]=temp->adjvex;
				len[temp->adjvex]=level+1;
				visit[temp->adjvex]=1;
			}
			temp=temp->next;
		}
	}
}

A[200]的整数数组,输出并打印其中数字出现的个数,每行打印数据值和次数,然后换行打印下一个数据和次数。

void Print(int a[200])//方法1
{
	int sum[200]={0};
	for(int i=0;i<200;i++)
	{
		sum[a[i]]++;
	}
	for(int i=0;i<200;i++)
		if(sum[i]!=0)
			printf("%d:%d ",i,sum[i]);
}
void P2(int a[])//方法2
{
	int visit[200]={0},i;
	for(i=0;i<200;i++)
	{
		if(visit[i]==0)
		{
			int count=0;
			for(int j=0;j<200;j++)
			{
				if(visit[j]==0&&a[i]==a[j])
				{
					count++;
					visit[j]=1;
				}
			}
		    printf("%d:%d\n",a[i],count);
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值