以下都是小旭大一下學期在家上網課的時候,一份份手寫搞成圖片粘進word里面的,現在免費做一個小匯總,主要涵蓋了一些簡單的介紹和10次線下作業及2次思維訓練,方便大家借鑒交流~
下面小旭先簡單地介紹下資料結構(別問,問就是搜羅匯總來的介紹QAQ)
一、定義: 資料結構是計算機存盤、組織資料的方式,資料結構是指相互之間存在一種或多種特定關系的資料元素的集合,通常情況下,精心選擇的資料結構可以帶來更高的運行或者存盤效率,資料結構往往同高效的檢索演算法和索引技術有關,
二、研究物件:
1.資料的邏輯結構: 指反映資料元素之間的邏輯關系的資料結構,其中的邏輯關系是指資料元素之間的前后件關系,而與他們在計算機中的存盤位置無關,邏輯結構包括: 集合結構(資料結構中的元素之間除了"同屬一個集合" 的相互關系外,別無其他關系) 線性結構(資料結構中的元素存在一對一的相互關系) 樹形結構(資料結構中的元素存在一對多的相互關系)
圖形結構(資料結構中的元素存在多對多的相互關系)2.資料的物理結構: 指資料的邏輯結構在計算機存盤空間的存放形式,
資料的物理結構: 資料結構在計算機存盤器中的具體實作,是邏輯結構的表示(又稱存盤映像),它包括資料元素的機內表示和關系的機內表示,由于具體實作的方法有順序、鏈接、索引、散列等多種,所以,一種資料結構可表示成一種或多種存盤結構,
資料元素的機內表示(映像方法): 用二進制位(bit)的位串表示資料元素,通常稱這種位串為節點(node),當資料元素有若干個資料項組成時,位串中與各資料項對應的子位串稱為資料域(data
field),因此,節點是資料元素的機內表示(或機內映像),關系的機內表示(映像方法): 資料元素之間的關系的機內表示可以分為順序映像和非順序映像,常用兩種存盤結構:順序存盤結構和鏈式存盤結構,順序映像借助元素在存盤器中的相對位置來表示資料元素之間的邏輯關系;非順序映像借助指示元素存盤位置的指標(pointer)來表示資料元素之間的邏輯關系,
3.資料結構的運算(這里就不一一贅述啦)
三、意義:
第一次線下作業【資料及其結構】
【簡單定義、資料的兩種存盤方式、ADT三元組、二分歸并排序的公式推導及復雜度求解】



typedef int Status;
typedef int ElemType;
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3){
T=(ElemType *)malloc(3 *sizeof(ElemType));
if(!T) exit(OVERFLOW);
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}

第二次線下作業【表】
【順序表的插入洗掉平均移動元素次數、單回圈鏈表洗掉節點的操作、各表的存盤方式】








第三次線下作業【堆疊】
【已知進堆疊順序求出堆疊順序、定義順序堆疊的資料型別】



SqStack *s
(s->top)-(s->base)
s->top
(s->top)++
1
第四次線下作業【佇列】
【回圈佇列的優點及判空滿、單回圈鏈表表示鏈隊時頭尾指標出入隊的操作時間、定義順序佇列的代碼補充】







第五次線下作業【字串】
【求串的next函式值、判斷字串是否對稱】


第六次線下作業【矩陣&廣義表】
【求矩陣的向量copt值、求廣義表深度&長度&表頭表尾、用head()&tail()函式取出LS中原子的運算命令組合】


第七次線下作業【樹】
【求葉子節點、畫二叉樹、畫哈夫曼樹、求二叉樹的遍歷順序】







第八次線下作業【圖】
【連通圖、無向圖、連通分量、最小生成樹(Prim和Krucskal演算法)】







第九次線下作業【散列/哈希】
【求二叉排序樹、求散列(在等概率下)的平均查找長度】




第十次線下作業【排序】
【希爾排序、快速排序、堆排序、二路歸并排序、置換選擇排序】




第一次思維訓練【合并新聞串列】


第二次思維訓練【合并有序線性表】

流程圖:

代碼:
#include <bits/stdc++.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define null 0
using namespace std;
int i,j,k,n,m,t,status,a[10000],b[10000];
typedef struct {
int *elem,length,size;
}SqList;
int ListLength(SqList SL) {
if(SL.elem!=null) return SL.length;
else return 0;
}
void GetElem(SqList SL,int i,int &e) {
if(i<0||i>ListLength(SL)) return ;
e=SL.elem[i-1];
}
int InitList(SqList &SL) {
SL.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(SL.elem==null) return 0;
SL.length=0;
SL.size=LIST_INIT_SIZE;
return 1;
}
//插入操作
int ListInsert(SqList &SL,int i,int e) {
int *newbase,*p,*q;
int len=ListLength(SL);
if(i<1||i>len+1) return 0;
if(SL.length>=SL.size)
{
newbase=(int *)realloc(SL.elem,(SL.size+LISTINCREMENT)*sizeof(int));
if(newbase==null) return 0;
SL.elem=newbase;
}
p=&SL.elem[i-1];
q=&SL.elem[len-1];
for(;q>=p;q--) *(q+1)=*q;
*p=e; SL.length++;
}
void Merg(SqList La,SqList Lb,SqList &Lc) {
InitList(Lc);
i=j=1;
k=0;
La.length = ListLength(La);
Lb.length = ListLength(Lb);
while((i<=La.length)&&(j<=Lb.length))
{
GetElem(La,i,a[i]);
GetElem(Lb,j,b[j]);
if(a[i]<=b[j]) {
ListInsert(Lc,++k,a[i]); ++i;}
else
{ListInsert(Lc,++k,b[j]); ++j;}
}
while(i<=La.length) {
GetElem(La,i,a[i]);
ListInsert(Lc,++k,a[i]);
i++;
}
while(j<=Lb.length) {
GetElem(Lb,j,b[j])A;
ListInsert(Lc,++k,b[j]);
j++;
}
}//MergeList
void traverse(SqList SL) {
for(i=0; i<SL.length; i++)
cout<<SL.elem[i]<<" ";
}
int main()
{
SqList La,Lb,Lc;
status=InitList(La);
if(status==0)
cout<<"SqList Init failed!";
status=InitList(Lb);
if(status==0)
cout<<"SqList Init failed!";
status=InitList(Lc);
if(status==0)
cout<<"SqList Init failed!";
cin>>m>>n;
for(i=1; i<=m; i++) {
cin>>t;
ListInsert(La,i,t);
}
for(i=1; i<=n; i++) {
cin>>t;
ListInsert(Lb,i,t);
}
traverse(La);
cout<<endl;
traverse(Lb);
Merg(La,Lb,Lc);
traverse(Lc);
return 0;
}
運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275789.html
標籤:其他
上一篇:學生管理系統課程設計

