swust-資料結構OJ題庫
資料結構OJ題庫
實力有限,只會做前10道,而且演算法並未考慮複雜度,不是最優方法,望大家諒解,如果覺得做的可以歡迎點贊!下面題目已經過了OJ平臺!如果有什麼不對歡迎指正,傳送訊息到郵箱[email protected]!
因為有悔,所以披星戴月;因為有夢,所以奮不顧身。
——MotiBoy
1、題目
AC程式碼:
#include<stdio.h>
/**
*有序順序表的合併操作的實現
*/
#define MaxSize 50
//定義順序表
struct Sqlist{
int data[MaxSize];
int length;
};
//非遞減插入
void merge(Sqlist &L,Sqlist D,Sqlist R)
{
int i=0,j=0;
L.length=0;
//比較大小插入
while(i<D.length&&j<R.length)
{
if(D.data[i]<=R.data[j])
{
L.data[L.length] = D.data[i];
i++;
L.length++;
}
else
{
L.data[L.length] = R.data[j];
j++;
L.length++;
}
}
while(i<D.length)
{
L.data[L.length] = D.data[i];
i++;
L.length++;
}
while(j<R.length)
{
L.data[L.length] = R.data[j];
j++;
L.length++;
}
}
int main()
{
Sqlist A,B,C;
int n,m;
//完成資料的輸入
scanf("%d",&A.length);
for(int i=0;i<A.length;i++)
scanf("%d",&A.data[i]);
scanf("%d",&B.length);
for(int i=0;i<B.length;i++)
scanf("%d",&B.data[i]);
merge(C,A,B);
for(int j=0;j<C.length;j++)
printf("%d ",C.data[j]);
printf("\n");
return 0;
}
2、題目
AC程式碼:
#include<stdio.h>
/**
*逆置順序表
*/
#define MaxSize 50
//定義順序表
struct Sqlist{
char data[MaxSize];
int length;
};
void ZhiHuan(Sqlist &L2,Sqlist L1)
{
//把L1的最後一個賦值給L2的第一個
int j=0;
L2.length=0;
for(int i=L1.length;i>0;i--)
{
L2.data[j] = L1.data[i];
j++;
L2.length++;
}
}
int main()
{
Sqlist L1,L2;
scanf("%d",&L1.length);
for(int i=0;i<=L1.length;i++)
{
scanf("%c",&L1.data[i]);
}
ZhiHuan(L2,L1);
//輸出逆置順序表
for(int i=0;i<L2.length;i++)
printf("%c ",L2.data[i]);
return 0;
}
3、題目
AC程式碼:
#include<stdio.h>
#define MaxSize 50
/**
*逆置順序表
*/
struct Sqlist{
int data[MaxSize];
int length;
};
void ChaZhaoTihuan(Sqlist &L1,int item,int data)
{
int i=-1;//定義i用以記錄查詢元素的位置
//遍歷順序表查詢item元素是否存在
for(int j=0;j<L1.length;j++)
{
if(L1.data[j]==item)
{
i=j;
break;//查詢成功,退出迴圈
}
}
if(i!=-1)
{//在已有元素前新增data資料
for(int j=L1.length;j>=i;j--)
L1.data[j]=L1.data[j-1];
L1.data[i]=data;
L1.length++;//表長+1
}
else{//未查詢到元素,在順序表的末尾
L1.data[L1.length]=data;
L1.length++;//表長+1
}
}
int main()
{
Sqlist L1;
scanf("%d",&L1.length);
for(int i=0;i<L1.length;i++)
{
scanf("%d",&L1.data[i]);
}
int item;
int data;
scanf("%d",&item);
scanf("%d",&data);
ChaZhaoTihuan(L1,item,data);
for(int i=0;i<L1.length;i++)
printf("%d ",L1.data[i]);
return 0;
}
4、題目
AC程式碼:
#include<stdio.h>
#include<stdlib.h>
/*
*單鏈表的插入操作的實現
*/
typedef struct Sqlist{
int data;
struct Sqlist *next;
}Sqlist;
//建立單鏈表 ,完成插入前連結串列的資料輸入工作
void CreatList(Sqlist *&L,int n)
{
Sqlist *s,*r;
L=(Sqlist *)malloc(sizeof(Sqlist));//頭結點
r=L;
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);//輸入一個數據,建立一個結點
s=(Sqlist *)malloc(sizeof(Sqlist));
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;//尾結點置空
}
//輸出單鏈表
void printList(Sqlist *L) {
Sqlist *r;
r=L->next;
while(r!=NULL) {
printf("%d ",r->data);
r=r->next;
}
}
void insertList(Sqlist *&L,int i,int data) {
int j=0;
Sqlist *p=L,*s;
if(i<0)//判斷非法插入
{
printf("error!");
exit(0);
}
while(j<i-1&&p!=NULL) {
j++;
p=p->next;
}
if(p==NULL)//判斷非法插入
{
printf("error!");
exit(0);
}
else {//在i-1位置插入結點
s=(Sqlist *)malloc(sizeof(Sqlist));//開闢新結點
s->data=data;//新結點的資料
s->next=p->next;//新結點指標指向p結點下一個指標域
p->next=s;//p結點指向新結點的指標
}
}
int main()
{
Sqlist *L;
int n,data,i;
scanf("%d",&n);
CreatList(L,n);
scanf("%d %d",&i,&data);
insertList(L,i,data);
printList(L);
return 0;
}
5、題目
AC程式碼:
#include<stdio.h>
#include<stdlib.h>
/*
*單鏈表的刪除操作的實現
*/
typedef struct Sqlist{
int data;
struct Sqlist *next;
}Sqlist;
//建立單鏈表 ,完成連結串列的資料輸入工作
void CreatList(Sqlist *&L,int n)
{
Sqlist *s,*r;
L=(Sqlist *)malloc(sizeof(Sqlist));//頭結點
r=L;
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);//輸入一個數據,建立一個結點
s=(Sqlist *)malloc(sizeof(Sqlist));
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;//尾結點置空
}
//輸出單鏈表
void printList(Sqlist *L) {
Sqlist *r;
r=L->next;
while(r!=NULL) {
printf("%d ",r->data);
r=r->next;
}
}
void deleateList(Sqlist *&L,int i,int n) {
int j=0;
Sqlist *p=L,*q;
if(i<1||i>=n)//判斷是否非法刪除結點 ,當i=1或i>5為非法刪除
{
printf("error!");
exit(0);
}
//尋找結點
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
{
printf("error!");
exit(0);
}
else
{//刪除i-1個結點
q=p->next;
p->next=q->next;
free(q);
n--;
}
}
int main()
{
Sqlist *L;
int n,i;
scanf("%d",&n);
CreatList(L,n);
scanf("%d",&i);
deleateList(L,i-1,n);
printList(L);
return 0;
}
6、題目
AC程式碼:
#include<stdio.h>
#include<stdlib.h>
/*
*單鏈表的連結
*/
typedef struct Sqlist{
char data;
struct Sqlist *next;
}Sqlist;
//建立單鏈表 ,完成連結串列的資料輸入工作
void CreatList(Sqlist *&L,int n)
{
Sqlist *s,*r;
L=(Sqlist *)malloc(sizeof(Sqlist));//頭結點
r=L;
for(int i=0;i<n;i++)
{
char a;
scanf("%c",&a);//輸入一個數據,建立一個結點
s=(Sqlist *)malloc(sizeof(Sqlist));
//判斷輸入是否合法,如果沒有這一句,程式會讀入從鍵盤中輸入的空格或者換行符你
while(a==' '||a=='\n')
{
scanf("%c",&a);
}
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;//尾結點置空
}
//輸出單鏈表
void printList(Sqlist *L) {
Sqlist *r;
r=L->next;
while(r!=NULL) {
printf("%c ",r->data);
r=r->next;
}
}
//連結兩個單鏈表
void linkList(Sqlist *&L1,Sqlist *&L2)
{
Sqlist *p=L1;
//找到第一個連結串列的尾結點
while(p->next!=NULL)
{
p=p->next;
}
//把第一連結串列的尾結點指向第二個連結串列的頭結點
p->next=L2->next;
//釋放已經無用第二個連結串列的頭結點
free(L2);
}
int main()
{
Sqlist *A,*B;
int n,m;
scanf("%d",&n);
CreatList(A,n);
scanf("%d",&m);
CreatList(B,m);
linkList(A,B);
printList(A);
return 0;
}
7、題目
AC程式碼:
#include<stdio.h>
#include<stdlib.h>
/*
*單鏈表上查詢演算法的實現
*/
typedef struct Sqlist{
int data;
struct Sqlist *next;
}Sqlist;
//建立單鏈表 ,完成連結串列的資料輸入工作
void CreatList(Sqlist *&L,int n)
{
Sqlist *s,*r;
L=(Sqlist *)malloc(sizeof(Sqlist));//頭結點
r=L;
for(int i=0;i<n;i++)
{
int a;
scanf("%d",&a);//輸入一個數據,建立一個結點
s=(Sqlist *)malloc(sizeof(Sqlist));
s->data=a;
r->next=s;
r=s;
}
資料結構OJ題庫實力有限,只會做前10道,而且演算法並未考慮複雜度,不是最優方法,望大家諒解,如果覺得做的可以歡迎點贊!下面題目已經過了OJ平臺!如果有什麼不對歡迎指正,傳送訊息到郵箱[email
1、(華文課後題)關於演算法特性描述正確的有:
A、演算法保證計算結果的正確性
B、組成演算法的指令可以有限也可能無限
C、演算法描述中下一步執行的步驟不確定
D、演算法的有窮性指演算法必須在有限步驟內結束
解析
演算法保證計算結果的正確性。
指令必須有
10.24號週三的上機題,先別急,原始碼在後面呢!!!
首先附上三張圖,是關於什麼是二叉樹的先序遍歷,中序遍歷,後序遍歷。
(1)先序遍歷
按照“根節點,左支,右支”的順序遍歷,如圖:
(2)中序遍歷
按照“左支,根節點,右支”的順序遍歷,如圖:
(2)後序遍歷
按
週三,19號的上機題。
題目,如圖:
不多廢話,直接原始碼:
#include<iostream>
#include<stdlib.h>
int a[100];
using namespace std;
class node {
public:
node
問題描述:有N(N>>10000)個整數,求出其中的前K個最大的數。(稱作Top k或者Top 10)
問題分析:由於(1)輸入的大量資料;(2)只要前K個,對整個輸入資料的儲存和排序是相當的不可取的。
解決方案1:最小堆
可以利用資料結構的最小堆來處理該問題。最小堆如圖所示
簡單說就是有一隻青蛙每次只能跳一到兩級臺階,在一個給定的臺階數下這隻青蛙有多少種達到頂端的方法。
思路分析 這裡用了兩種方法實現,並用python程式碼實現。
方法一 :遞迴 看到題目第一個想法就是遞迴,假設青蛙跳上n級臺階有f(n)種可能的方法,可以分成兩大類情況。第一種是最後一次跳了一級
一個無序整數陣列,對它排序,使其前半部分都為奇數有序,後半部分為偶數有序。
(1)方案1 O(n^2)
基本想法:利用插入排序演算法,對奇偶子序列分別插入排序。用兩個變數把整個陣列分割為三個部分,第一個部分為奇數有序子序列,第二部分為偶數有序子序列,第三部分為未排序子序列。使用兩個變數進行分
處理策略是定義兩個指標pHead,pTail並令其初始指向陣列頭節點和尾節點。pHead從前往後找應該放在尾部的偶數節點,pTail從後往前找應該放在頭部的奇數節點,若pHead位於pTail之前則交換二者內容,否則結束處理過程。
處理流程如下圖所示。從圖中可以看出時間複
分析:如果兩個單向連結串列有公共的結點,也就是說兩個連結串列從某一結點開始,它們的m_pNext都指向同一個結點。但由於是單向連結串列的結點,每個結點只有一個m_pNext,因此從第一個公共結點開始,之後它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的連結串列,拓撲形狀看起
package com.lee.wait;
import java.util.Arrays; import java.util.HashSet; import java.util.Set;
/** * ArrayUniue 陣列去重的問題 */ public clas
求兩個輸入序列的最長的公共子字串的長度。子字串中的所有字元在源字串中必須相鄰。
如字串:21232523311324和字串312123223445,他們的最長公共子字串為21232,長度為5.
假設需要求的字串為 str1 , str2 .函式 f(m,n) 求分別以str1[m] , str
1首先看一下 最大子序列。
最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有
一,問題描述
給定兩個字串,求解這兩個字串的最長公共子序列(Longest Common Sequence)。比如字串1:BDCABA;字串2:ABCBDAB
則這兩個字串的最長公共子序列長度為4,最長公共子序列是:BCBA
二,演算法求解
這是一個動態規劃的題目。
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。
說明:
初始化 nums1 和 nums2&n
有三種方法,時間複雜度分別是O(m+n) ,O(k),O(log(m+n))
注意點: 判斷合併後的陣列的元素個數是奇數還是偶數 如果是奇數取中間值;如果是偶數取中間2個數的平均值。
兩種求中位數的方法: (1)方法1,判斷奇數個還是偶數個
if (lengthall % 2 == 0)
#include<iostream>
using namespace std;
int main(){
int i,n;
int a[50];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<
const int maxvalue=100;
const int maxbit=100;
const int maxn=100;
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
using namespace std;
stru
更多西南交通大學真題,參考:西南交通大學計算機考研——資料結構真題系列
一、考研真題
1.已知穿線二叉樹結點資料型別定義如本卷第二大題第8小題所示,若二叉樹已經線索華,試編寫演算法函式,形參傳入根結點root,函式值返回二叉樹的葉子結點數。(提示:葉子結點的判斷條件是:ltag==0&a
和用棧求解迷宮問題思路相似,特此記錄下。
程式碼:
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <algorithm>
using namespace
考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。
可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343
演算法: MinDistance(A[0..n-1])
相關推薦
swust-資料結構OJ題庫
資料結構概述題庫
資料結構上機題(10.24)
資料結構上機題(週三)
資料結構演算法題/top K問題
資料結構演算法題/青蛙跳臺階問題
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數分別有序)
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數不需要有序)
資料結構演算法題/找出兩個連結串列的第一個公共節點
資料結構演算法題/陣列去重
資料結構演算法題/最長公共子串
資料結構演算法題/最大子序列(一維陣列中和最大的連續子序列)
資料結構演算法題/兩個字串的最長公共子序列
資料結構演算法題/合併兩個有序陣列
資料結構演算法題/兩個有序陣列的中位數
SWUST資料結構--希爾排序演算法實現
SWUST資料結構--哈夫曼譯碼
西南交通大學計算機學碩——資料結構真題1:2017年程式與演算法設計題
資料結構實驗題:用棧求解n皇后問題
資料結構演算法題/求陣列中大小最接近的兩個元素的差