資料結構基礎(ZJU C版)

2021-09-25 01:41:27 字數 4519 閱讀 1062

概念

線性表(linear list):由同型別資料元素構成有序序列的線性結構

線性表的順序儲存實現 定義

/*定義*/

typedef int position;

typedef struct lnode *list;

struct lnode ;

初始化

/* 初始化 */

list makeempty()

查詢

/* 查詢 */

#define error -1

position find( list l, elementtype x )

插入

/* 插入 */

bool insert( list l, elementtype x, position p )

if ( p<0 || p>l->last+1 )

for( i=l->last; i>=p; i-- )

l->data[i+1] = l->data[i]; /* 將位置p及以後的元素順序向後移動 */

l->data[p] = x; /* 新元素插入 */

l->last++; /* last仍指向最後元素 */

return true;

}

刪除

/* 刪除 */

bool delete( list l, position p )

for( i=p+1; i<=l->last; i++ )

l->data[i-1] = l->data[i]; /* 將位置p+1及以後的元素順序向前移動 */

l->last--; /* last仍指向最後元素 */

return true;

}

線性表的鏈式儲存實現 定義

typedef struct lnode *ptrtolnode;

struct lnode ;

typedef ptrtolnode position;

typedef ptrtolnode list;

查詢

/* 查詢 */

#define error null

position find( list l, elementtype x )

帶頭結點的插入

/* 帶頭結點的插入 */

bool insert( list l, elementtype x, position p )

else

}

帶頭結點的刪除

/* 帶頭結點的刪除 */

bool delete( list l, position p )

else

}

堆疊的抽象資料型別描述

堆疊(stack):具有一定操作約束的線性表,只在一端(棧頂,top)做 插入、刪除

棧的順序儲存實現 定義

#define maxsize 《儲存資料元素的最大個數》

typedef struct snode *stack;

struct snode;

入棧

void push( stack ptrs, elementtype item )

else

}

出棧

elementtype pop( stack ptrs )

else

return ( ptrs->data[(ptrs->top)--] );

}

堆疊的鏈式儲存實現 定義

typedef struct snode *ptrtosnode;

struct snode ;

typedef ptrtosnode stack;

stack createstack( )

判斷

bool isempty ( stack s )

bool isfull( stack s )

入棧

bool push( stack s, elementtype x )

出棧

elementtype pop( stack s )  

else

}

佇列的抽象資料型別描述

佇列(queue):具有一定操作約束的線性表

插入和刪除操作:只能在一端插入,而在另一端刪除。

佇列的順序儲存實現

定義

typedef int position;

struct qnode ;

typedef struct qnode *queue;

queue createqueue( int maxsize )

入列

bool addq( queue q, elementtype x )

else

}

出列

elementtype deleteq( queue q )

else

}

判斷

bool isfull( queue q )

bool isempty( queue q )

堆疊的鏈式儲存實現 定義

typedef struct node *ptrtonode;

struct node ;

typedef ptrtonode position;

struct qnode ;

typedef struct qnode *queue;

出列

elementtype deleteq( queue q )

else

}

題目:

設計函式分別求兩個一元多項式的乘積與和

已知兩個多項式:

(1) 3x4 - 5x2 + 6x - 2

(2) 5x20 - 7x4 + 3x

多項式乘積:

15x24-25x22+30x21-10x20-21x8+35x6-33x5+14x4-15x3+18x2-6x

多項式的表示
typedef struct polynode *polynomial;

struct polynode ;

程式框架搭建
int main()

如何讀入多項式
polynomial readpoly()

t = p; p = p->link; free(t); /* 刪除臨時生成的頭結點 */

return p;

}void attach( int c, int e, polynomial *prear )

rear初值是多少?

兩種處理方法:

rear初值為null

rear指向乙個空結點

如何將兩個多項式相加

polynomial add( polynomial p1, polynomial p2 )

else if (t1->expon > t2->expon)

else

}while (t1)

while (t2)

……..

return p;

}

如何將兩個多項式相乘

方法:1.將乘法運算轉換為加法運算

將p1當前項(ci,ei)乘p2多項式,再加到結果多項式中

2.逐項插入

將p1當前項(c1i,e1i)乘p2當前項(c2i,e2i),並插入到結果多項式

中。關鍵是要找到插入位置

初始結果多項式可由p1第一項乘p2獲得(如上)

polynomial mult( polynomial p1, polynomial p2 )

t1 = t1->link;

while (t1)

}else

t2 = t2->link;

}t1 = t1->link;

}t2 = p; p = p->link; free(t2);

return p;

}

如何將多項式輸出
void printpoly( polynomial p )

while ( p )

printf("\n");

}

資料結構(c 版)

第一章 緒論 1.資料表示 資料儲存在計算機的記憶體中,核心是資料結構。資料處理 實際問題的求解必須滿足各項處理要求,核心是演算法。2.資料 資訊的載體,計算機中指所有能輸入到計算機中並能被電腦程式識別和處理的符號集合。資料元素 資料的基本單位。資料項 構成資料元素的不可分割的最小單位。資料結構 相...

資料結構(c 版)

第一章 緒論 1.1資料表示 資料儲存在計算機的記憶體中,核心是資料結構。資料處理 實際問題的求解必須滿足各項處理要求,核心是演算法。1.2資料 資訊的載體,計算機中指所有能輸入到計算機中並能被電腦程式識別和處理的符號集合。資料元素 資料的基本單位。資料項 構成資料元素的不可分割的最小單位。資料結構...

資料結構基礎

資料結構定義 定義 一 資料元素集合 也可稱資料物件 中各元素的關係。定義 二 相互之間存在特定關係的資料元素集合。資料結構的種類 1 集合 2 線性結構 3 樹形結構 4 圖狀結構 或網狀結構 資料結構的形式定義 資料結構名稱 d,s 其中d為資料元素的有限集,s是d上關係的有限集 邏輯結構 資料...