❶ 数据结构题目,求代码。
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
voidMergeList(SqListLa,SqListLb,SqList&Lc){
Lc.elem=(ElemType*)malloc(sizeof(ElemType*)*(La.length+Lb.length));
if(!Lc.elem)return;
pc=Lc.elem;
pa=La.elem;pa_end=La.elem+La.length-1;
pb=Lb.elem;pb_end=Lb.elem+Lb.length-1;
while(pa<=pa_end&&pb<=pb_end){
if(*pa<*pb){
*pc++=*pa++;
}
else*pc++=*pb++;
}
while(pa<=pa_end)*pc++=*pa++;
while(pb<=pb_end)*pc++=*pb++;
}
第一个,第三个都比较简单,给你的是第二个。别总等着现成的,混的了一是混不了一世。自己动手风衣主食
❷ 经典笔试面试知识整理,数据结构与算法(代码演示)
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入描述: array: 待查找的二维数组 target:查找的数字
输出描述:
查找到返回true,查找不到返回false
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目描述: 输入一个链表,从尾到头打印链表每个节点的值。
输入描述: 输入为链表的表头
输出描述: 输出为需要打印的“新链表”的表头
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
1、题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
2、题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
3、题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
4、题目描述:
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
1、题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
2、题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作, 队列中的元素为int类型。
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
❸ 求解两个数据结构的题目,具体要用c语言实现,求代码
呵呵.我这里刚好有前些天给同学写的一个.看下结果吧.. 代码有点多哦.:
#include<iostream>
#include<stdlib.h>using namespace std;
typedef struct _ListNode // 此处修改为自定义数据类?
{
int data; // 结点数据
_ListNode *link; // 指向下个结点 _ListNode() // 此处添加默认的"构造函数"
{
data = 0;
link = NULL;
}
}ListNode, LinkList;
/******************************函数定义注释头***********************************
* 函数名 : void CreateLinkList(LinkList *head, int length)
* 开发时间 : 2010-3-19 11:00:15
* 函数功能 : 创建一个链表
* 全局变量和结构 : 无
* 调用的主要函数 : 无
* 返回值说明 : 返回链表头结点指针
* 参数表 : head : 链表头结点
length : 链表长度
******************************函数体定义**************************************/
LinkList * CreateLinkList(LinkList *head, int length)
{ LinkList *temp = NULL;
int predata = 0, curdata = 0;
temp = head;
for (int i = 1; i <= length; i++)
{
cout << "输入第" << i <<"个结点data:";
head->link = new ListNode();
head = head->link; if (i == 1)
{
cin >> head->data; // 输入第一个结点的data
predata = head->data; // 保存第一个结点的data
}
else
{
while (1)
{
//cout<<"输入第"<<i<<"个结点的data:";
cin>>curdata;
if (curdata >= predata) // 现在输入的数小于前一个数
{
head->data = curdata;
predata = curdata; // 修改数据
break; // 终止输入
}
else // 否则继续输入
{
cout<<"error!!current data:"<<curdata<<"小于previous data:"
<<predata<<"不满足链表条件,重新输入!"<<endl;
continue;
} // if (curdata >= predata)
} // while (1)
}// if (i == 1)
}// for (int i = 1; i <= length; i++) head = temp; return(head);
}
/******************************函数定义注释头***********************************
* 函数名 : void Connect(const LinkList *listA,
const LinkList *listB,
LinkList *listC)
* 开发时间 : 2010-3-19 11:05:38
* 函数功能 : 进行两个链表的链接
* 全局变量和结构 : 无
* 调用的主要函数 : 无
* 返回值说明 : 无
* 参数表 : listA : 第一个链表
listB : 第二个链表
listC : 链接后的链表头结点
******************************函数体定义**************************************/
void Connect(const LinkList *listA, const LinkList *listB, LinkList *listC)
{
const ListNode *pointer1 = NULL;
const ListNode *pointer2 = NULL;
ListNode *pointer3 = NULL;
pointer1 = listA->link;
pointer2 = listB->link; pointer3 = listC;
while ((pointer1 != NULL) && (pointer2 != NULL))
{
pointer3->link = new ListNode();
pointer3 = pointer3->link;
if (pointer1->data <= pointer2->data)
{
pointer3->data = pointer1->data;
pointer1 = pointer1->link; // 修改指针
}
else
{
pointer3->data = pointer2->data;
pointer2 = pointer2->link; // 修改指针
}
} // 将剩余的数据添加到链接后的链表中
if (pointer1 == NULL)
{
while (pointer2 != NULL)
{
pointer3->link = new ListNode();
pointer3 = pointer3->link; pointer3->data = pointer2->data;
pointer2 = pointer2->link;
}
}
if (pointer2 == NULL)
{
while (pointer1 != NULL)
{
pointer3->link = new ListNode();
pointer3 = pointer3->link; pointer3->data = pointer1->data;
pointer1 = pointer1->link;
}
}
}/******************************函数定义注释头***********************************
* 函数名 : void Display(const LinkList *list)
* 开发时间 : 2010-3-19 13:18:15
* 函数功能 : 输出一个链表中的数据
* 全局变量和结构 : 无
* 调用的主要函数 : 无
* 返回值说明 : 无
* 参数表 : list : 链表头结点
******************************函数体定义**************************************/
void Display(const LinkList *list)
{
const ListNode *p = NULL;
p = list->link; cout<<endl<<"这个链表中的数据为:"<<endl;
while (p != NULL)
{
cout<<p->data<<" ";
p = p->link;
} cout<<endl;
}
/******************************函数定义注释头***********************************
* 函数名 : void Destroy(LinkList *list)
* 开发时间 : 2010-3-19 13:20:23
* 函数功能 : 销毁一个链表
* 全局变量和结构 : 无
* 调用的主要函数 : 无
* 返回值说明 : 无
* 参数表 : 链表头结点
******************************函数体定义**************************************/
void Destroy(LinkList *list)
{
ListNode *p = NULL;
ListNode *temp = NULL;
p = temp = list;
while(p != NULL)
{
temp = p->link;
delete p;
p = temp;
} list = NULL;
}/******************************函数定义注释头***********************************
* 函数名 : void main()
* 开发时间 : 2010-3-19 13:02:47
* 函数功能 :
* 全局变量和结构 :
* 调用的主要函数 :
* 返回值说明 :
* 参数表 :
******************************函数体定义**************************************/
void main()
{
ListNode *h_first = NULL;
ListNode *h_second = NULL; // 分别为第一个和第二个链表的头结点
ListNode *h_result = NULL; // 链接后的链表头结点
int length = 0; // 链表长度
h_first = new ListNode();
h_second = new ListNode(); // 分配空间 cout << "请输入第一个链表的长度:";
cin >> length;
h_first = CreateLinkList(h_first, length);
cout << "请输入第二个链表的长度:";
cin >> length;
h_second = CreateLinkList(h_second, length); Display(h_first);
Display(h_second); h_result = new ListNode();
Connect(h_first, h_second, h_result);
Display(h_result);
Destroy(h_first);
Destroy(h_second);
Destroy(h_result);
❹ 数据结构c 语言版题目,求代码!!! 请一定用C语言,求大神帮忙
如图
/*
小L居住的地方有很多城市...
作者:q839219286
算法思想:城市图采用DFS搜索,搜索终止条件是:到达终点或Vmax-Vmin>dV
设dV=Vmax-Vmin,求dV的方法是利用Vmax、Vmin的递归历史记录
图结构采用“邻接表”法,存储结构采用数组。
*/
//C语言版
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
//宏定义函数
#defineMAX(a,b)(a)>(b)?(a):(b)
#defineMIN(a,b)(a)<(b)?(a):(b)
//图节点结构(邻接表法)
structVNode{
structEdge*next;
charvisited; //是否在本路径中访问过,=1是;=0否
};
//图的边结构(邻接表法)
structEdge{
intv; //道路的行驶速度
structVNode*adjVex; //道路通向的城市节点
structEdge*next;
};
#definemax_Vex500
#definemax_Edge5000
//最多500个城市(其中下标为0不使用)
structVNodevex[max_Vex+1];
structEdgeedge[max_Edge*2]; //一条边有两个节点需要记录
intvex_Num,edge_Num;
structVNode*start,*end; //起点、终点
intminDIF; //已经找到的通往终点路径中Vmax-Min的最小差值
voidaddEdge(intUi,intVi,intWi);//新增Ui通往Vi的道路
voidbuildGraph();
voidDFS(structVNode*vex,intVmax,intVmin);
intmain(){
intQ; scanf("%d",&Q); //一个整数Q,代表有多少组测试数据。
intout[5],i; //2≤Q≤5
for(i=0;i<Q;i++){
buildGraph(); //scanf已包含在内
DFS(start,-1,INT_MAX-1);
out[i]=minDIF;
}
//输出最终结果
for(i=0;i<Q;i++){
printf("%d
",out[i]);
}
//getchar();getchar(); //防止闪退
return0;
}
voidDFS(structVNode*vex,intVmax,intVmin){
if(Vmax-Vmin>=minDIF)return; //一旦超限,则没有继续遍历的意义
if(vex==end){ //到达终点
minDIF=Vmax-Vmin; //已经保证Vmax-Vmin<minDIF
}else{ //继续遍历
vex->visited=1; //防止DFS无限循环
structEdge*next;
for(next=vex->next;
next!=NULL;next=next->next){
if(0==next->adjVex->visited) //下一节点不在已走过的节点
DFS(next->adjVex,MAX(next->v,Vmax),MIN(next->v,Vmin));
}
vex->visited=0; //时光倒流
}
}
//新增Ui通往Vi的道路
voidaddEdge(intUi,intVi,intWi){
edge[edge_Num].adjVex=vex+Vi;
edge[edge_Num].v=Wi;
edge[edge_Num].next=vex[Ui].next; //链表头插法
vex[Ui].next=edge+edge_Num;
edge_Num++;
}
voidbuildGraph(){
introad_Num,i,startID,endID;
structVNode*p_V;
scanf("%d%d",&vex_Num,&road_Num);
//初始化节点。倒序遍历,注意vex[0]不算入。其实可以用memset()秒杀的,我写的是原生代码版本
for(p_V=vex+vex_Num;p_V>vex;p_V--){
p_V->next=NULL;
p_V->visited=0;
}
//注意road_Num条道路有2*edge_Num个邻接表边
edge_Num=0;
for(;road_Num>0;road_Num--){ //road_Num条道路读入road_Num行数据
intUi,Vi,Wi;//3个整数Ui,Vi,Wi,(i=1,…..,M),道路的两个城市编号和道路的行驶速度。
scanf("%d%d%d",&Ui,&Vi,&Wi);
//注意两个方向都要添加
addEdge(Ui,Vi,Wi);
addEdge(Vi,Ui,Wi);
}
//余下数据赋值
scanf("%d%d",&startID,&endID);
start=vex+startID;
end=vex+endID;
minDIF=INT_MAX;
}
❺ 数据结构代码题
您好,已经解决了
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, k;
int n = 10;
int x, a[100] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("x= ");
scanf("%d", &x);
for(i = n - 1; i >= 0 && a[i] > x; i--)
a[i + 1] = a[i];
a[i + 1] = x;
n++;
for(i = 0; i < n; i++) // 依次输出线性表中的元素版
printf("%d ", a[i]);
return 0;
}
采纳权哦~
❻ 数据结构c 语言版题目,求代码!!!
#include<stdio.h>
voidsort(int*a,intleft,intright){
if(left>=right){
return;
}
inti=left;
intj=right;
intkey=a[left];
while(i<j){
while(i<j&&key<=a[j]){
j--;
}
a[i]=a[j];
while(i<j&&key>=a[i]){
i++;
}
a[j]=a[i];
}
a[i]=key;
sort(a,left,i-1);
sort(a,i+1,right);
}
intmain(){
intn,count=0;
charstr[1000];
inta[1000];
scanf("%d",&n);
getchar();
intm[n];
for(inti=0;i<n;i++){
gets(str);
intindex1=0,flag=1,index2=0,length=0;
while(str[index1]!='