❶ 數據結構題目,求代碼。
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]!='