1. 程式人生 > >swust-資料結構OJ題庫

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=1i>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;

}

相關推薦

swust-資料結構OJ

資料結構OJ題庫實力有限,只會做前10道,而且演算法並未考慮複雜度,不是最優方法,望大家諒解,如果覺得做的可以歡迎點贊!下面題目已經過了OJ平臺!如果有什麼不對歡迎指正,傳送訊息到郵箱[email

資料結構概述

1、(華文課後題)關於演算法特性描述正確的有:  A、演算法保證計算結果的正確性  B、組成演算法的指令可以有限也可能無限  C、演算法描述中下一步執行的步驟不確定  D、演算法的有窮性指演算法必須在有限步驟內結束 解析 演算法保證計算結果的正確性。 指令必須有

資料結構上機(10.24)

10.24號週三的上機題,先別急,原始碼在後面呢!!! 首先附上三張圖,是關於什麼是二叉樹的先序遍歷,中序遍歷,後序遍歷。 (1)先序遍歷 按照“根節點,左支,右支”的順序遍歷,如圖: (2)中序遍歷 按照“左支,根節點,右支”的順序遍歷,如圖: (2)後序遍歷 按

資料結構上機(週三)

週三,19號的上機題。 題目,如圖: 不多廢話,直接原始碼: #include<iostream> #include<stdlib.h> int a[100]; using namespace std; class node { public: node

資料結構演算法/top K問題

問題描述:有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)

SWUST資料結構--希爾排序演算法實現

#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<

SWUST資料結構--哈夫曼譯碼

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:2017年程式與演算法設計

更多西南交通大學真題,參考:西南交通大學計算機考研——資料結構真題系列 一、考研真題 1.已知穿線二叉樹結點資料型別定義如本卷第二大題第8小題所示,若二叉樹已經線索華,試編寫演算法函式,形參傳入根結點root,函式值返回二叉樹的葉子結點數。(提示:葉子結點的判斷條件是:ltag==0&a

資料結構實驗:用棧求解n皇后問題

和用棧求解迷宮問題思路相似,特此記錄下。 程式碼: #include <iostream> #include <stdlib.h> #include <cmath> #include <algorithm> using namespace

資料結構演算法/求陣列中大小最接近的兩個元素的差

考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。 可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343 演算法: MinDistance(A[0..n-1])