資料結構實驗指導
實驗一:線性表的操作
實驗一a:線性表的順序儲存結構操作
【題目】
設順序表va中的資料元素遞增有序,試寫一演算法,將x插入到順序表的適當位置上,以保證該錶的有序性。
【實驗目的】
掌握用動態陣列實現線性表的順序儲存結構及順序表的初始化、查詢、插入操作。
【分析】
本程式設計方法:先根據插入結點x的值查詢插入位置,然後從表尾到插入位置的元素依次往後移一步空出x元素的位置,送入x,順序表長度增1。
【程式】
#include
#include
#define list_init_size 10
#define increment 3
typedef struct sqlist; //型別定義
int *p;
void initlist_sq(sqlist &l) //初始化順序表
l.elem=(int *)malloc(list_init_size*sizeof(int));
if(!l.elem) printf("overflow");
else lnode,*linklist;
linklist creat() //建立帶頭單鏈表
void ex2_22(linklist l) //逆置單鏈表
else
else
r->next=c->next;c->next=r;
while (p)
stacknode,*linkstack;
void initstack(linkstack *toppt) //初始化棧
int isempty(linkstack top) //判空棧
void push (linkstack *toppt,int e) //進棧
squeue;
void initqueue(squeue *qpt,int size) //初始化迴圈佇列
int isfull(squeue *qpt) //判滿
int enq(squeue *qpt,int x) //進隊
else if(choice!=4) printf("error\n");
圖4 實驗二b迴圈佇列操作的執行介面
實驗三 二叉樹的操作
【實驗目的】
掌握二叉樹上遞迴和非遞迴的前序、中序、後序遍歷演算法。
【實驗三題目1】
編寫遞迴演算法,將二叉樹中所有結點的左右子樹相互交換。
【分析】
本題按前序遍歷演算法實現二叉樹中所有結點的左右子樹相互交換,即按前序的順序判斷結點的子樹是否為空,若非空則左右子樹相互交換。
【程式】
#include
#include
typedef struct binodebinode,*bitree;
typedef structstack;
bitree creat_bt()binode,*bitree;
void preorder(bitree t) //非遞迴的前序遍歷
return n;
bitree creat_bt()bnode,*bitree;
void treelevel(bnode *t) //層次遍歷
bnode *q[maxn],*p;
int front,rear;
front=rear=0;
if (!t) return;
q[rear]=t; //樹根進隊
rear =(rear+1)%maxn;
while (front!=rear) //判佇列空否
p=q[front]; //出隊
front=(front+1)%maxn;
printf ("%c",p->data);// 輸出
if (p->lchild) boolean;//定義布林型別
typedef structmgraph; //定義圖的鄰接矩陣儲存型別
boolean visited[max];//定義全域性變數
void createmgraph(mgraph *g)//圖用鄰接矩陣儲存
void dfsm(mgraph *g,int i) //深度優先遍歷
boolean;
typedef struct nodeedgenode; //定義邊型別
typedef struct vnodevertexnode; //定義頂點型別
typedef structalgraph;//定義圖的鄰接表型別
boolean visited[max];
void createalgraph(algraph *g)//建鄰接表
binode,*bitree;//定義二叉鍊錶型別
void preorderf(bitree t)//前序遍歷
while (top>=0);
bitree ins(bitree t ,bitree f,int x)//二叉排序樹中插入x
//p轉化為只有乙個子樹了
if (p->lchild) child=p->lchild; //被刪結點有左子樹
else child=p->rchild; 被刪結點有右子樹
if (f==null)t=child;
else if (p==f->lchild)f->lchild=child;
else f->rchild=child;
free (p);
return t;
void main()
else
printf("\n繼續輸入x,直到輸入0為止");
scanf("%d",&x);
printf("\n二叉排序樹的前序為;");
preorderf(root);
printf("\n");
圖10 二叉排序樹的動態查詢執行介面
實驗六 排序演算法的實現
【實驗六題目1】
鍊錶直接插入排序的演算法的實現。
【實驗目的】
掌握插入排序的演算法及在鏈式儲存結構上的實現方法。
【分析】
本程式先建無序的單鏈表,然後從第二個結點(由r指標指向)開始的每個結點依次插入到前面有序鍊錶中,有序鍊錶的尾指標是q。
【程式】
#include
#include
typedef int elemtype;
typedef struct nodelnode,*linklist;
linklist creat() //建立帶頭單鏈表
else q=q->next;
r=q->next ;
output(linklist l)
main()
lnode,*linklist;
linklist creat()
//最小結點插在p後
p=p->next;
output(linklist l)
main()
{linklist l;
printf("\n建鍊錶,輸入序列(直至輸入0 結束):");
l=creat();
selectsort(l);
printf("\n鏈式選擇排序後的序列:");
output(l);
printf("\n");
圖12 鍊錶選擇排序的執行介面
資料結構實驗
資料結構實驗 寫乙個學生管理系統 如下 define overflow 1 define ok 1 define error 1 define maxsize 6 define increment 10 include include include include typedef int stat...
資料結構實驗
資料結構實驗 實驗一 順序表的實現及應用 實驗一 順序表的實現及應用 一 實驗實習目的及要求 了解和掌握線性表的順序儲存結構 掌握用c語言上機除錯線性表的基本方法 掌握線性表的基本操作 插入 刪除 查詢以及線性表合併等運算在順序儲存結構和鏈結儲存結構上的運算,以及對相應演算法的效能分析。二 實驗實習...
資料結構學習與實驗指導 二)陣列元素移動
本次實驗是根據陳越老師的資料結構學習與實驗指導中的第二章,陣列元素迴圈右移。一共有兩個方法 是每次移動1個元素,迴圈移動n次 通過三次逆序陣列的部分資料 下面是 方法 include define arraymax 100 int dir void shift int arr,int n void ...