C語言之常用資料結構

2021-10-04 03:16:10 字數 3618 閱讀 6197

目錄

一、順序表

二、單鏈表

三、雙向鍊錶

三、順序棧

四、迴圈佇列

五、二叉樹

順序表是線性表的順序儲存,通過一組位址連續的儲存單元依次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。假定線性表的元素型別為elemtype,則線性表的順序儲存型別描述為:

//靜態分配

#define maxsize 50

typedef int elemtype;

typedef structsqlist;

c語言中一維陣列可以進行動態分配避免溢位;

(1)插入操作

bool listinsert(sqlist &l,int i,elemtype e)
(2)刪除操作

bool listdelete(sqlist &l,int i, elemtype &e)linknode, *linklist;
通常用頭指標來標識乙個單鏈表,此外為了操作上的方便,在單鏈表第乙個節點之前附加乙個結點,稱為頭結點。

(1)建立單鏈表

linklist creatlist1(linklist &l)

return l;

} linklist creatlist2(linklist &l)

r->next=null;

return l;

}

(2)按序號查詢節點值

lnode *getelem(linklist l,int i)

return p;

}

(3)按值查詢表結點

lnode *locateelem(linklist l,elemtype e)
(4)插入結點

bool listfrontinsert(linklist l,int i,elemtype e)

linklist s=(lnode*)malloc(sizeof(lnode));

s->data=e;

s->next=p->next;

p->next=s;

return true;

}

typedef int elemtype;

typedef struct dnodednode,*dlinklist;

dlinklist dlist_head_insert(dlinklist &dl)

s->prior=dl;

dl->next=s;

scanf("%d",&x);

} return dl;

} dlinklist dlist_tail_insert(dlinklist &dl)

r->next=null;

return dl;

} dnode *getelem(dlinklist dl,int i)

return p;

}bool dlistfrontinsert(dlinklist dl,int i,elemtype e)

dlinklist s=(dnode*)malloc(sizeof(dnode));

s->data=e;

s->next=p->next;

p->next->prior=s;

s->prior=p;

p->next=s;

return true;

}bool dlistdelete(dlinklist dl,int i)

dlinklist q;

q=p->next;

if(q==null)

return false;

p->next=q->next;

if(q->next!=null)

free(q);

return true;

}

順序棧是採用順序儲存的棧,它利用一組位址連續的儲存單元存放自棧底到棧頂的資料元素,同時設乙個指標top指示當前棧頂位置。

//實現棧 可以用陣列,也可以用鍊錶 

#define maxsize 50

typedef int elemtype;

typedef struct sqstack;

typedef struct linknode*listack;

void initstack(sqstack &s)

bool stackempty(sqstack &s)

bool push(sqstack &s,elemtype x)

s.data[++s.top]=x;

return true;

}bool pop(sqstack &s,elemtype &x)

bool gettop(sqstack &s,elemtype &x)

迴圈佇列是將順序佇列臆造為乙個環狀空間,即把儲存佇列元素的表從邏輯上視為乙個環,稱為迴圈佇列。

順序佇列結點型別描述如下:

//佇列可以用陣列也可用鍊錶實現 

#define maxsize 5

typedef int elemtype;

typedef structsqqueue;

void initqueue(sqqueue &q)

bool isempty(sqqueue &q)

bool enqueue(sqqueue &q,elemtype x)

bool dequeue(sqqueue &q,elemtype &x)

鏈式佇列描述如下:

typedef int elemtype;

typedef struct linknodelinknode;

typedef structlinkqueue;

void initqueue(linkqueue &q)

bool isempty(linkqueue &q)

void enqueue(linkqueue &q,elemtype x)

bool dequeue(linkqueue &q,elemtype &x)

//鏈式儲存

typedef struct binode

binode,*bitree;

//前中後序遍歷

void inorder(bitree t)

void preorder(bitree t)

void postorder(bitree t)

//層次遍歷

void leverorder(bitree bt)

}

}//非遞迴

void inorder(bitree t)else }}

void postorder(bitree t)

else else }}

}

資料結構 C語言 之樹

所謂二叉樹就是只具有0,1,2三種度的一顆樹 前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹為空則結束返回,否則 1 訪問根結點。2 前序遍歷左子樹。3 前序遍歷右子樹 需要注意的是 遍歷左右子樹時仍然採用前序遍歷...

C語言之資料結構 鍊錶二

struct link dellink struct link head,int data else p p next return head struct link changelink struct link head,int data,int newdata point point next ...

資料結構C語言之單鏈表簡單實現

include stdafx.h include include 定義單鏈表 typedef struct lnodelnode,linklist int tmain int argc,tchar argv void createlinklist linklist l,int n 使頭結點還原到原始...