欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告

      時(shí)間:2019-05-12 07:17:17下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告

      數(shù)據(jù)結(jié)構(gòu)(C語言版)實(shí)驗(yàn)報(bào)告

      專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程

      學(xué)號(hào):____201240703061___________________

      班級(jí):_________軟件二班______________ 姓名:________朱海霞______________ 指導(dǎo)教師:___劉遵仁________________

      青島大學(xué)信息工程學(xué)院

      2013年10月

      實(shí)驗(yàn)1

      實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除

      實(shí)驗(yàn)?zāi)康模?/p>

      了解和掌握線性表的邏輯結(jié)構(gòu)和順序存儲(chǔ)結(jié)構(gòu),掌握線性表的基本算法及相關(guān)的時(shí)間性能分析。

      實(shí)驗(yàn)要求:

      建立一個(gè)數(shù)據(jù)域定義為整數(shù)類型的線性表,在表中允許有重復(fù)的數(shù)據(jù);根據(jù)輸入的數(shù)據(jù),先找到相應(yīng)的存儲(chǔ)單元,后刪除之。

      實(shí)驗(yàn)主要步驟:

      1、分析、理解給出的示例程序。

      2、調(diào)試程序,并設(shè)計(jì)輸入一組數(shù)據(jù)(3,-5,6,8,2,-5,4,7,-9),測試程序的如下功能:根據(jù)輸入的數(shù)據(jù),找到相應(yīng)的存儲(chǔ)單元并刪除,顯示表中所有的數(shù)據(jù)。

      程序代碼:

      #include #include #define OK 1 #define ERROR 0 #define OVERFLOW-2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct{ int* elem;int length;int listsize;}Sqlist;int InitList_Sq(Sqlist &L){ L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)return-1;L.length=0;L.listsize=LIST_INIT_SIZE;return OK;} int ListInsert_Sq(Sqlist&L,int i,int e){ if(i<1||i>L.length+1)return ERROR;if(L.length==L.listsize){

      int *newbase;

      newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));

      if(!newbase)return-1;

      L.elem=newbase;

      L.listsize+=LISTINCREMENT;} int *p,*q;q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;--p)

      *(p+1)=*p;*q=e;++L.length;return OK;} int ListDelete_Sq(Sqlist &L,int i,int e){ int *p,*q;if(i<1||i>L.length)return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p)

      *(p-1)=*p;--L.length;return OK;} int main(){ Sqlist L;InitList_Sq(L);//初始化

      int i,a[]={3,-5,6,8,2,-5,4,7,-9};for(i=1;i<10;i++)

      ListInsert_Sq(L,i,a[i-1]);for(i=0;i<9;i++)

      printf(“ %d”,L.elem[i]);

      printf(“n”);//插入9個(gè)數(shù)

      ListInsert_Sq(L,3,24);for(i=0;i<10;i++)

      printf(“ %d”,L.elem[i]);

      printf(“n”);//插入一個(gè)數(shù)

      int e;ListDelete_Sq(L,2, e);for(i=0;i<9;i++)

      printf(“ %d”,L.elem[i]);//刪除一個(gè)數(shù)

      printf(“n”);

      return 0;}

      實(shí)驗(yàn)結(jié)果:

      3,-5,6,8,2,-5,4,7,-9 3,-5,24,6,8,2,-5,4,7,-9 3,24,6,8,2,-5,4,7,-9

      心得體會(huì):

      順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取結(jié)構(gòu),存取任何元素的時(shí)間是一個(gè)常數(shù),速度快;結(jié)構(gòu)簡單,邏輯上相鄰的元素在物理上也相鄰;不使用指針,節(jié)省存儲(chǔ)空間;但是插入和刪除元素需要移動(dòng)大量元素,消耗大量時(shí)間;需要一個(gè)連續(xù)的存儲(chǔ)空間;插入元素可能發(fā)生溢出;自由區(qū)中的存儲(chǔ)空間不能被其他數(shù)據(jù)共享

      實(shí)驗(yàn)2

      實(shí)驗(yàn)題目:單鏈表的插入和刪除

      實(shí)驗(yàn)?zāi)康模?/p>

      了解和掌握線性表的邏輯結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),掌握單鏈表的基本算法及相關(guān)的時(shí)間性能分析。

      實(shí)驗(yàn)要求:

      建立一個(gè)數(shù)據(jù)域定義為字符類型的單鏈表,在鏈表中不允許有重復(fù)的字符;根據(jù)輸入的字符,先找到相應(yīng)的結(jié)點(diǎn),后刪除之。

      實(shí)驗(yàn)主要步驟:

      3、分析、理解給出的示例程序。

      4、調(diào)試程序,并設(shè)計(jì)輸入數(shù)據(jù)(如:A,C,E,F(xiàn),H,J,Q,M),測試程序的如下功能:不允許重復(fù)字符的插入;根據(jù)輸入的字符,找到相應(yīng)的結(jié)點(diǎn)并刪除。

      5、修改程序:

      (1)增加插入結(jié)點(diǎn)的功能。

      (2)建立鏈表的方法有“前插”、“后插”法。

      程序代碼: #include #include #define NULL 0 #define OK 1 #define ERROR 0 typedef struct LNode{

      int data;

      struct LNode *next;}LNode,*LinkList;int InitList_L(LinkList &L){ L=(LinkList)malloc(sizeof(LNode));L->next=NULL;return OK;} int ListInsert_L(LinkList &L,int i,int e){ LinkList p,s;int j;p=L;j=0;while(p&&j

      p=p->next;++j;} if(!p||j>i-1)

      return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;} int ListDelete_L(LinkList&L,int i,int &e){ LinkList p,q;int j;p=L;j=0;while(p->next&&j

      p=p->next;++j;} if(!(p->next)||j

      return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;} int main(){ LinkList L,p;char a[8]={'A','C','E','F','H','J','Q','U'};int i,j;InitList_L(L);for(i=1,j=0;i<=8,j<8;i++,j++)

      ListInsert_L(L,i,a[j]);p=L->next;while(p!=NULL){

      printf(“%ct”,p->data);

      p=p->next;

      }

      }//插入八個(gè)字符 printf(“n”);i=2;int e;ListInsert_L(L,i,'B');p=L->next;while(p!=NULL){ printf(“%ct”,p->data);p=p->next;}//插入一個(gè)字符 printf(“n”);i=3;ListDelete_L(L,i,e);p=L->next;while(p!=NULL){ printf(“%ct”,p->data);p=p->next;} printf(“n”);return 0;實(shí)驗(yàn)結(jié)果:

      A C E F H J Q U A B C E F H J Q U A B E F H J Q U

      心得體會(huì):

      單鏈表是通過掃描指針P進(jìn)行單鏈表的操作;頭指針唯一標(biāo)識(shí)點(diǎn)鏈表的存在;插入和刪除元素快捷,方便。

      實(shí)驗(yàn)3

      實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí)際中靈活應(yīng)用。

      2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則。

      3、掌握棧的基本運(yùn)算,如:入棧與出棧等運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。

      實(shí)驗(yàn)要求:

      回文判斷:對于一個(gè)從鍵盤輸入的字符串,判斷其是否為回文?;匚募凑葱蛳嗤?。如“abba”是回文,而“abab”不是回文。

      實(shí)驗(yàn)主要步驟

      (1)數(shù)據(jù)從鍵盤讀入;(2)輸出要判斷的字符串;

      (3)利用棧的基本操作對給定的字符串判斷其是否是回文,若是則輸出“Yes”,否則輸出“No”。

      程序代碼: #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW-2 #define N 100 #define STACK_INIT_SIZE 100

      #define STACKINCREMENT 10

      typedef struct{

      int *base;

      // 在棧構(gòu)造之前和銷毀之后,base的值為NULL

      int *top;

      // 棧頂指針

      int

      stacksize;

      // 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位

      } SqStack;

      int InitStack(SqStack &S){ // 構(gòu)造一個(gè)空棧S

      if(!(S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int))))

      exit(OVERFLOW);

      // 存儲(chǔ)分配失敗

      S.top=S.base;

      S.stacksize=STACK_INIT_SIZE;

      return OK;

      }

      int StackEmpty(SqStack S){ // 若棧S為空棧,則返回TRUE,否則返回FALSE

      if(S.top==S.base)

      return TRUE;

      else

      return FALSE;}

      int Push(SqStack &S, int e){ // 插入元素e為新的棧頂元素

      if(S.top-S.base>=S.stacksize)// 棧滿,追加存儲(chǔ)空間

      {

      S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));

      if(!S.base)

      exit(OVERFLOW);// 存儲(chǔ)分配失敗

      S.top=S.base+S.stacksize;

      S.stacksize+=STACKINCREMENT;

      }

      *(S.top)++=e;

      return OK;}

      int Pop(SqStack &S,int &e){ // 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR

      if(S.top==S.base)

      return ERROR;

      e=*--S.top;

      return OK;} int main(){

      SqStack s;

      int i,e,j,k=1;

      char ch[N] = {0},*p,b[N] = {0};

      if(InitStack(s))// 初始化棧成功

      {

      printf(“請輸入表達(dá)式:n”);

      gets(ch);

      p=ch;

      while(*p)// 沒到串尾

      Push(s,*p++);

      for(i=0;i

      if(!StackEmpty(s)){// 棧不空

      Pop(s,e);// 彈出棧頂元素

      b[i]=e;

      }

      }

      for(i=0;i

      if(ch[i]!=b[i])

      k=0;}

      if(k==0)

      printf(“NO!”);

      else

      printf(“輸出:”)printf(“YES!”);

      }

      return 0;

      }

      實(shí)驗(yàn)結(jié)果:

      請輸入表達(dá)式: abcba 輸出:YES!心得體會(huì):棧是僅能在表尾驚醒插入和刪除操作的線性表,具有先進(jìn)后出的性質(zhì),這個(gè)固有性質(zhì)使棧成為程序設(shè)計(jì)中的有用工具。

      實(shí)驗(yàn)4

      實(shí)驗(yàn)題目:二叉樹操作設(shè)計(jì)和實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握二叉樹的定義、性質(zhì)及存儲(chǔ)方式,各種遍歷算法。

      實(shí)驗(yàn)要求:

      采用二叉樹鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。

      實(shí)驗(yàn)主要步驟:

      1、分析、理解程序。

      2、調(diào)試程序,設(shè)計(jì)一棵二叉樹,輸入完全二叉樹的先序序列,用#代表虛結(jié)點(diǎn)(空指針),如ABD###CE##F##,建立二叉樹,求出先序、中序和后序以及按層次遍歷序列,求所有葉子及結(jié)點(diǎn)總數(shù)。

      程序代碼:

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      實(shí)驗(yàn)5

      實(shí)驗(yàn)題目:圖的遍歷操作

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握有向圖和無向圖的概念;掌握鄰接矩陣和鄰接鏈表建立圖的存儲(chǔ)結(jié)構(gòu);掌握DFS及BFS對圖的遍歷操作;了解圖結(jié)構(gòu)在人工智能、工程等領(lǐng)域的廣泛應(yīng)用。

      實(shí)驗(yàn)要求:

      采用鄰接矩陣和鄰接鏈表作為圖的存儲(chǔ)結(jié)構(gòu),完成有向圖和無向圖的DFS和BFS操作。

      實(shí)驗(yàn)主要步驟:

      設(shè)計(jì)一個(gè)有向圖和一個(gè)無向圖,任選一種存儲(chǔ)結(jié)構(gòu),完成有向圖和無向圖的DFS(深度優(yōu)先遍歷)和BFS(廣度優(yōu)先遍歷)的操作。

      1. 鄰接矩陣作為存儲(chǔ)結(jié)構(gòu) #include“stdio.h” #include“stdlib.h” #define MaxVertexNum 100

      //定義最大頂點(diǎn)數(shù) typedef struct{

      char vexs[MaxVertexNum];

      //頂點(diǎn)表

      int edges[MaxVertexNum][MaxVertexNum];

      //鄰接矩陣,可看作邊表

      int n,e;

      //圖中的頂點(diǎn)數(shù)n和邊數(shù)e }MGraph;

      //用鄰接矩陣表示的圖的類型 //=========建立鄰接矩陣======= void CreatMGraph(MGraph *G){

      int i,j,k;

      char a;

      printf(“Input VertexNum(n)and EdgesNum(e): ”);

      scanf(“%d,%d”,&G->n,&G->e);

      //輸入頂點(diǎn)數(shù)和邊數(shù)

      scanf(“%c”,&a);

      printf(“Input Vertex string:”);

      for(i=0;in;i++)

      {

      scanf(“%c”,&a);

      G->vexs[i]=a;

      //讀入頂點(diǎn)信息,建立頂點(diǎn)表

      }

      for(i=0;in;i++)

      for(j=0;jn;j++)

      G->edges[i][j]=0;

      //初始化鄰接矩陣

      printf(“Input edges,Creat Adjacency Matrixn”);

      for(k=0;ke;k++){

      //讀入e條邊,建立鄰接矩陣

      scanf(“%d%d”,&i,&j);

      //輸入邊(Vi,Vj)的頂點(diǎn)序號(hào)

      G->edges[i][j]=1;

      G->edges[j][i]=1;//若為無向圖,矩陣為對稱矩陣;若建立有向圖,去掉該條語句

      } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(MGraph *G,int i){ //以Vi為出發(fā)點(diǎn)對鄰接矩陣表示的圖G進(jìn)行DFS搜索,鄰接矩陣是0,1矩陣

      給出你的編碼

      //===========BFS:廣度優(yōu)先遍歷======= void BFS(MGraph *G,int k){ //以Vk為源點(diǎn)對用鄰接矩陣表示的圖G進(jìn)行廣度優(yōu)先搜索

      給出你的編碼

      //==========主程序main ===== void main(){

      int i;

      MGraph *G;

      G=(MGraph *)malloc(sizeof(MGraph));

      //為圖G申請內(nèi)存空間

      CreatMGraph(G);

      //建立鄰接矩陣

      printf(“Print Graph DFS: ”);

      DFS(G);

      //深度優(yōu)先遍歷

      printf(“n”);

      printf(“Print Graph BFS: ”);

      BFS(G,3);

      //以序號(hào)為3的頂點(diǎn)開始廣度優(yōu)先遍歷

      printf(“n”);}

      2. 鄰接鏈表作為存儲(chǔ)結(jié)構(gòu) #include“stdio.h” #include“stdlib.h” #define MaxVertexNum 50

      //定義最大頂點(diǎn)數(shù) typedef struct node{

      //邊表結(jié)點(diǎn)

      int adjvex;

      //鄰接點(diǎn)域

      struct node *next;

      //鏈域 }EdgeNode;typedef struct vnode{

      //頂點(diǎn)表結(jié)點(diǎn)

      char vertex;

      //頂點(diǎn)域

      EdgeNode *firstedge;

      //邊表頭指針 }VertexNode;typedef VertexNode AdjList[MaxVertexNum];

      //AdjList是鄰接表類型 typedef struct {

      AdjList adjlist;

      //鄰接表

      int n,e;

      //圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù) } ALGraph;

      //圖類型 //=========建立圖的鄰接表======= void CreatALGraph(ALGraph *G){

      int i,j,k;

      char a;

      EdgeNode *s;

      //定義邊表結(jié)點(diǎn)

      printf(“Input VertexNum(n)and EdgesNum(e): ”);

      scanf(“%d,%d”,&G->n,&G->e);

      //讀入頂點(diǎn)數(shù)和邊數(shù)

      scanf(“%c”,&a);

      printf(“Input Vertex string:”);

      for(i=0;in;i++)

      //建立邊表

      { scanf(“%c”,&a);G->adjlist[i].vertex=a;

      //讀入頂點(diǎn)信息

      G->adjlist[i].firstedge=NULL;//邊表置為空表

      }

      printf(“Input edges,Creat Adjacency Listn”);

      for(k=0;ke;k++){

      //建立邊表

      scanf(“%d%d”,&i,&j);

      //讀入邊(Vi,Vj)的頂點(diǎn)對序號(hào)

      s=(EdgeNode *)malloc(sizeof(EdgeNode));

      //生成邊表結(jié)點(diǎn)

      s->adjvex=j;

      //鄰接點(diǎn)序號(hào)為j s->next=G->adjlist[i].firstedge;G->adjlist[i].firstedge=s;

      //將新結(jié)點(diǎn)*S插入頂點(diǎn)Vi的邊表頭部

      s=(EdgeNode *)malloc(sizeof(EdgeNode));

      s->adjvex=i;

      //鄰接點(diǎn)序號(hào)為i s->next=G->adjlist[j].firstedge;

      G->adjlist[j].firstedge=s;

      //將新結(jié)點(diǎn)*S插入頂點(diǎn)Vj的邊表頭部

      } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(ALGraph *G,int i){ //以Vi為出發(fā)點(diǎn)對鄰接鏈表表示的圖G進(jìn)行DFS搜索 給出你的編碼

      //==========BFS:廣度優(yōu)先遍歷========= void BFS(ALGraph *G,int k){ //以Vk為源點(diǎn)對用鄰接鏈表表示的圖G進(jìn)行廣度優(yōu)先搜索

      給出你的編碼

      //==========主函數(shù)=========== void main(){

      int i;

      ALGraph *G;

      G=(ALGraph *)malloc(sizeof(ALGraph));

      CreatALGraph(G);

      printf(“Print Graph DFS: ”);

      DFS(G);

      printf(“n”);

      printf(“Print Graph BFS: ”);

      BFS(G,3);

      printf(“n”);}

      實(shí)驗(yàn)結(jié)果:

      1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu)

      2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu)

      心得體會(huì):

      實(shí)驗(yàn)6

      實(shí)驗(yàn)題目:二分查找算法的實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握二分查找法的工作原理及應(yīng)用過程,利用其工作原理完成實(shí)驗(yàn)題目中的內(nèi)容。

      實(shí)驗(yàn)要求:

      編寫程序構(gòu)造一個(gè)有序表L,從鍵盤接收一個(gè)關(guān)鍵字key,用二分查找法在L中查找key,若找到則提示查找成功并輸出key所在的位置,否則提示沒有找到信息。

      實(shí)驗(yàn)主要步驟:

      1.建立的初始查找表可以是無序的,如測試的數(shù)據(jù)為{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。2.給出算法的遞歸和非遞歸代碼;

      3.如何利用二分查找算法在一個(gè)有序表中插入一個(gè)元素x,并保持表的有序性?

      程序代碼

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      實(shí)驗(yàn)7

      實(shí)驗(yàn)題目:排序

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握各種排序方法的基本思想、排序過程、算法實(shí)現(xiàn),能進(jìn)行時(shí)間和空間性能的分析,根據(jù)實(shí)際問題的特點(diǎn)和要求選擇合適的排序方法。

      實(shí)驗(yàn)要求:

      實(shí)現(xiàn)直接排序、冒泡、直接選擇、快速、堆、歸并排序算法。比較各種算法的運(yùn)行速度。

      實(shí)驗(yàn)主要步驟:

      程序代碼

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      第二篇:c數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

      c數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

      數(shù)據(jù)結(jié)構(gòu)(C語言版)實(shí)驗(yàn)報(bào)告;專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程;學(xué)號(hào):____XX40703061_____;班級(jí):_________軟件二班________;姓名:________朱海霞__________;指導(dǎo)教師:___劉遵仁_____________;青島大學(xué)信息工程學(xué)院;XX年10月;實(shí)驗(yàn)1;實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除;實(shí)驗(yàn)?zāi)?/p>

      數(shù)據(jù)結(jié)構(gòu)(C語言版)實(shí)驗(yàn)報(bào)告

      專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程

      學(xué)號(hào):____XX40703061___________________

      班級(jí):_________軟件二班______________

      姓名:________朱海霞______________

      指導(dǎo)教師:___劉遵仁________________

      青島大學(xué)信息工程學(xué)院

      XX年10月

      實(shí)驗(yàn)1

      實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除

      實(shí)驗(yàn)?zāi)康模?/p>

      了解和掌握線性表的邏輯結(jié)構(gòu)和順序存儲(chǔ)結(jié)構(gòu),掌握線性表的基本算法及相關(guān)的時(shí)間性能分析。

      實(shí)驗(yàn)要求:

      建立一個(gè)數(shù)據(jù)域定義為整數(shù)類型的線性表,在表中允許有重復(fù)的數(shù)據(jù);根據(jù)輸入的數(shù)據(jù),先找到相應(yīng)的存儲(chǔ)單元,后刪除之。

      實(shí)驗(yàn)主要步驟:

      1、分析、理解給出的示例程序。

      2、調(diào)試程序,并設(shè)計(jì)輸入一組數(shù)據(jù)(3,-5,6,8,2,-5,4,7,-9),測試程序的如下功能:根據(jù)輸入的數(shù)據(jù),找到相應(yīng)的存儲(chǔ)單元并刪除,顯示表中所有的數(shù)據(jù)。

      程序代碼:

      #include

      #include

      #define OK 1

      #define ERROR 0

      #define OVERFLOW-2

      #define LIST_INIT_SIZE 100

      #define LISTINCREMENT 10

      typedef struct{

      int* elem;

      int length;

      int listsize;

      }Sqlist;

      int InitList_Sq(Sqlist &L){

      =(int*)malloc(LIST_INIT_SIZE*sizeof(int));

      if(!)return-1;

      =0;

      =LIST_INIT_SIZE;

      return OK;

      }

      int ListInsert_Sq(Sqlist&L,int i,int e){

      if(i+1)return ERROR;

      if(==){

      int *newbase;

      newbase=(int*)realloc(,(+LISTINCREMENT)*sizeof(int));

      if(!newbase)return-1;

      =newbase;

      +=LISTINCREMENT;

      }

      int *p,*q;

      q=&();

      for(p=&();p>=q;--p)

      *(p+1)=*p;

      *q=e;

      ++;

      return OK;

      }

      int ListDelete_Sq(Sqlist &L,int i,int e){

      int *p,*q;

      if(i)return ERROR;

      p=&();

      e=*p;

      q=+;

      for(++p;p *(p-1)=*p;

      --;

      return OK;

      }

      int main(){

      Sqlist L;

      InitList_Sq(L);//初始化

      int i,a={3,-5,6,8,2,-5,4,7,-9};

      for(i=1;i ListInsert_Sq(L,i,a);

      for(i=0;i printf(“ %d”,);

      printf(“ ”);//插入9個(gè)數(shù)

      ListInsert_Sq(L,3,24);

      for(i=0;i printf(“ %d”,);

      printf(“ ”);//插入一個(gè)數(shù)

      int e;

      ListDelete_Sq(L,2, e);

      for(i=0;i printf(“ %d”,);//刪除一個(gè)數(shù)

      printf(“ ”);

      return 0;

      }

      實(shí)驗(yàn)結(jié)果:

      3,-5,6,8,2,-5,4,7,-9

      3,-5,24,6,8,2,-5,4,7,-9

      3,24,6,8,2,-5,4,7,-9

      心得體會(huì):

      順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取結(jié)構(gòu),存取任何元素的時(shí)間是一個(gè)常數(shù),速度快;結(jié)構(gòu)簡單,邏輯上相鄰的元素在物理上也相鄰;不使用指針,節(jié)省存儲(chǔ)空間;但是插入和刪除元素需要移動(dòng)大量元素,消耗大量時(shí)間;需要一個(gè)連續(xù)的存儲(chǔ)空間;插入元素可能發(fā)生溢出;自由區(qū)中的存儲(chǔ)空間不能被其他數(shù)據(jù)共享 實(shí)驗(yàn)2

      實(shí)驗(yàn)題目:單鏈表的插入和刪除

      實(shí)驗(yàn)?zāi)康模?/p>

      了解和掌握線性表的邏輯結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),掌握單鏈表的基本算法及相關(guān)的時(shí)間性能分析。

      實(shí)驗(yàn)要求:

      建立一個(gè)數(shù)據(jù)域定義為字符類型的單鏈表,在鏈表中不允許有重復(fù)的字符;根據(jù)輸入的字符,先找到相應(yīng)的結(jié)點(diǎn),后刪除之。

      實(shí)驗(yàn)主要步驟:

      3、分析、理解給出的示例程序。

      4、調(diào)試程序,并設(shè)計(jì)輸入數(shù)據(jù)(如:A,C,E,F(xiàn),H,J,Q,M),測試程序的如下功能:不允許重復(fù)字符的插入;根據(jù)輸入的字符,找到相應(yīng)的結(jié)點(diǎn)并刪除。

      5、修改程序:

      (1)增加插入結(jié)點(diǎn)的功能。

      (2)建立鏈表的方法有“前插”、“后插”法。

      程序代碼:

      #include

      #include

      #define NULL 0

      #define OK 1

      #define ERROR 0

      typedef struct LNode{

      int data;

      struct LNode *next;

      }LNode,*LinkList;

      int InitList_L(LinkList &L){

      L=(LinkList)malloc(sizeof(LNode));L->next=NULL;

      return OK;

      } int ListInsert_L(LinkList &L,int i,int e){ LinkList p,s;

      int j;

      p=L;j=0;

      while(p&&j

      p=p->next;++j;

      }

      if(!p||j>i-1)

      return ERROR;

      s=(LinkList)malloc(sizeof(LNode));s->data=e;

      s->next=p->next;

      p->next=s;

      return OK;

      } int

      ListDelete_L(LinkList&L,int

      i,int &e){ LinkList p,q;

      int j;

      p=L;j=0;

      while(p->next&&j

      p=p->next;++j;

      }

      if(!(p->next)||j

      return ERROR;

      q=p->next;p->next=q->next;e=q->data;free(q);

      return OK;

      }

      int main(){

      LinkList L,p;

      char a={'A','C','E','F','H','J','Q','U'};int i,j;

      InitList_L(L);

      for(i=1,j=0;i p=L->next;

      while(p!=NULL){

      printf(“%c ”,p->data);p=p->next;}//插入八個(gè)字符

      printf(“;實(shí)驗(yàn)結(jié)果:;ACEFHJQU;ABCEFHJQU;ABEFHJQU;心得體會(huì):;單鏈表是通過掃描指針P進(jìn)行單鏈表的操作;頭指針唯;實(shí)驗(yàn)3;實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn);實(shí)驗(yàn)?zāi)康模?

      1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí);

      2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則;

      3、掌握棧的基本運(yùn)算,如:入棧與出棧

      }

      }//插入八個(gè)字符 printf(” “);i=2;int e;ListInsert_L(L,i,'B');

      p=L->next;while(p!=NULL){ printf(”%c “,p->data);p=p->next;}//插入一個(gè)字符 printf(” “);i=3;ListDelete_L(L,i,e);p=L->next;while(p!=NULL){ printf(”%c “,p->data);p=p->next;} printf(” “);return 0;

      實(shí)驗(yàn)結(jié)果:

      A C E F H J Q U

      A B C E F H J Q U

      A B E F H J Q U

      心得體會(huì):

      單鏈表是通過掃描指針P進(jìn)行單鏈表的操作;頭指針唯一標(biāo)識(shí)點(diǎn)鏈表的存在;插入和刪除元素快捷,方便。

      實(shí)驗(yàn)3

      實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí)際中靈活應(yīng)用。

      2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則。

      3、掌握棧的基本運(yùn)算,如:入棧與出棧等運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。

      實(shí)驗(yàn)要求:

      回文判斷:對于一個(gè)從鍵盤輸入的字符串,判斷其是否為回文。回文即正反序相同。如

      “abba”是回文,而“abab”不是回文。

      實(shí)驗(yàn)主要步驟

      (1)數(shù)據(jù)從鍵盤讀入;

      (2)輸出要判斷的字符串;

      (3)利用棧的基本操作對給定的字符串判斷其是否是回文,若是則輸出“Yes”,否則輸出“No”。

      程序代碼:

      #include

      #include

      #define TRUE 1

      #define FALSE 0

      #define OK 1

      #define ERROR 0

      #define OVERFLOW-2

      #define N 100

      #define STACK_INIT_SIZE 100

      #define STACKINCREMENT 10

      typedef struct{

      int *base;// 在棧構(gòu)造之前和銷毀之后,base的值為NULL int *top;// 棧頂指針

      int stacksize;// 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位

      } SqStack;

      int InitStack(SqStack &S)

      { // 構(gòu)造一個(gè)空棧S

      if(!(=(int *)malloc(STACK_INIT_SIZE*sizeof(int))))

      exit(OVERFLOW);// 存儲(chǔ)分配失敗

      =;

      =STACK_INIT_SIZE;

      return OK;

      }

      int StackEmpty(SqStack S)

      { // 若棧S為空棧,則返回TRUE,否則返回FALSE

      if(==)

      return TRUE;

      else

      return FALSE;

      }

      int Push(SqStack &S, int e)

      { // 插入元素e為新的棧頂元素

      if(>=)// 棧滿,追加存儲(chǔ)空間

      {

      =(int *)realloc(,(+STACKINCREMENT)*sizeof(int));if(!)

      exit(OVERFLOW);// 存儲(chǔ)分配失敗

      =+;

      +=STACKINCREMENT;

      }

      *()++=e;

      return OK;

      }

      int Pop(SqStack &S,int &e)

      { // 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR if(==)

      return ERROR;

      e=*--;

      return OK;

      }

      int main(){

      SqStack s;

      int i,e,j,k=1;

      char ch = {0},*p,b = {0};

      if(InitStack(s))// 初始化棧成功

      {

      printf(”請輸入表達(dá)式: “);

      gets(ch);

      p=ch;

      while(*p)// 沒到串尾

      Push(s,*p++);

      for(i=0;i

      if(!StackEmpty(s)){// 棧不空

      Pop(s,e);// 彈出棧頂元素

      b=e;

      }

      }

      for(i=0;i

      if(ch!=b)

      k=0;

      }

      if(k==0)

      printf(”NO!“);

      else

      printf(”輸出:“)

      printf(”YES!“);

      }

      return 0;

      }

      實(shí)驗(yàn)結(jié)果:

      請輸入表達(dá)式:

      abcba

      輸出:YES!

      心得體會(huì):棧是僅能在表尾驚醒插入和刪除操作的線性表,具有先進(jìn)后出的性質(zhì),這個(gè)固有性質(zhì)使棧成為程序設(shè)計(jì)中的有用工具。

      實(shí)驗(yàn)4

      實(shí)驗(yàn)題目:二叉樹操作設(shè)計(jì)和實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握二叉樹的定義、性質(zhì)及存儲(chǔ)方式,各種遍歷算法。

      實(shí)驗(yàn)要求:

      采用二叉樹鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。

      實(shí)驗(yàn)主要步驟:

      1、分析、理解程序。

      2、調(diào)試程序,設(shè)計(jì)一棵二叉樹,輸入完全二叉樹的先序序列,用#代表虛結(jié)點(diǎn)(空指針),如ABD###CE##F##,建立二叉樹,求出先序、中序和后序以及按層次遍歷序列,求所有葉子及結(jié)點(diǎn)總數(shù)。

      程序代碼:

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      實(shí)驗(yàn)5

      實(shí)驗(yàn)題目:圖的遍歷操作

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握有向圖和無向圖的概念;掌握鄰接矩陣和鄰接鏈表建立圖的存儲(chǔ)結(jié)構(gòu);掌握DFS及BFS對圖的遍歷操作;了解圖結(jié)構(gòu)在人工智能、工程等領(lǐng)域的廣泛應(yīng)用。

      實(shí)驗(yàn)要求:

      采用鄰接矩陣和鄰接鏈表作為圖的存儲(chǔ)結(jié)構(gòu),完成有向圖和無向圖的DFS和BFS操作。

      實(shí)驗(yàn)主要步驟:

      設(shè)計(jì)一個(gè)有向圖和一個(gè)無向圖,任選一種存儲(chǔ)結(jié)構(gòu),完成有向圖和無向圖的DFS(深度優(yōu)先遍歷)和BFS(廣度優(yōu)先遍歷)的操作。

      1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu)

      #include”“

      #include”“

      #define MaxVertexNum 100 //定義最大頂點(diǎn)數(shù)

      typedef struct{

      char vexs;//頂點(diǎn)表

      int edges;//鄰接矩陣,可看作邊表 int n,e;//圖中的頂點(diǎn)數(shù)n和邊數(shù)e

      }MGraph;//用鄰接矩陣表示的圖的類型

      //=========建立鄰接矩陣=======

      void CreatMGraph(MGraph *G)

      {

      int i,j,k;

      char a;

      printf(”Input VertexNum(n)and EdgesNum(e): “);

      scanf(”%d,%d“,&G->n,&G->e);//輸入頂點(diǎn)數(shù)和邊數(shù)

      scanf(”%c“,&a);

      printf(”Input Vertex string:“);

      for(i=0;in;i++)

      {

      scanf(”%c“,&a);

      G->vexs=a;//讀入頂點(diǎn)信息,建立頂點(diǎn)表

      }

      for(i=0;in;i++)

      for(j=0;jn;j++)

      G->edges=0;//初始化鄰接矩陣

      printf(”Input edges,Creat Adjacency Matrix “);

      for(k=0;ke;k++){ //讀入e條邊,建立鄰接矩陣

      scanf(”%d%d“,&i,&j);//輸入邊(Vi,Vj)的頂點(diǎn)序號(hào)

      G->edges=1;;G->edges=1;//若為;//=========定義標(biāo)志向

      量,為

      量=;typedefenum{FALSE,TRUE}B;Booleanvisited=1;

      G->edges=1;//若為無向圖,矩陣為對稱矩陣;若建立有向圖,去掉該條語句 }

      }

      //=========定義標(biāo)志向量,為全局變量=======

      typedef enum{FALSE,TRUE} Boolean;

      Boolean visited;

      //========DFS:深度優(yōu)先遍歷的遞歸算法======

      void DFSM(MGraph *G,int i)

      { //以Vi為出發(fā)點(diǎn)對鄰接矩陣表示的圖G進(jìn)行DFS搜索,鄰接矩陣是0,1矩陣

      給出你的編碼

      //===========BFS:廣度優(yōu)先遍歷=======

      void BFS(MGraph *G,int k)

      { //以Vk為源點(diǎn)對用鄰接矩陣表示的圖G進(jìn)行廣度優(yōu)先搜索

      給出你的編碼

      //==========主程序main =====

      void main()

      {

      int i;

      MGraph *G;

      G=(MGraph *)malloc(sizeof(MGraph));//為圖G請內(nèi)存空間

      CreatMGraph(G);//建立鄰接矩陣

      printf(”Print Graph DFS: “);

      DFS(G);//深度優(yōu)先遍歷

      printf(” “);

      printf(”Print Graph BFS: “);

      BFS(G,3);//以序號(hào)為3的頂點(diǎn)開始廣度優(yōu)先遍歷

      printf(” “);

      }

      2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu)

      #include”“

      #include”“

      #define MaxVertexNum 50 //定義最大頂點(diǎn)數(shù)

      typedef struct node{ //邊表結(jié)點(diǎn)

      int adjvex;//鄰接點(diǎn)域

      struct node *next;//鏈域

      }EdgeNode;

      typedef struct vnode{ //頂點(diǎn)表結(jié)點(diǎn)

      char vertex;//頂點(diǎn)域

      EdgeNode *firstedge;//邊表頭指針

      }VertexNode;

      typedef VertexNode AdjList;//AdjList是鄰接表類型 typedef struct {

      AdjList adjlist;//鄰接表

      int n,e;//圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù)

      } ALGraph;//圖類型

      //=========建立圖的鄰接表=======

      void CreatALGraph(ALGraph *G)

      {

      int i,j,k;

      char a;

      EdgeNode *s;//定義邊表結(jié)點(diǎn)

      printf(”Input VertexNum(n)and EdgesNum(e): “);

      scanf(”%d,%d“,&G->n,&G->e);//讀入頂點(diǎn)數(shù)和邊數(shù)

      scanf(”%c“,&a);

      printf(”Input Vertex string:“);

      for(i=0;in;i++)//建立邊表

      {

      scanf(”%c“,&a);

      G->adjlist.vertex=a;//讀入頂點(diǎn)信息

      G->adjlist.firstedge=NULL;//邊表置為空表

      }

      printf(”Input edges,Creat Adjacency List “);

      for(k=0;ke;k++){ //建立邊表

      scanf(”%d%d“,&i,&j);//讀入邊(Vi,Vj)的頂點(diǎn)對序號(hào)

      s=(EdgeNode *)malloc(sizeof(EdgeNode));//生成邊表結(jié)點(diǎn)

      s->adjvex=j;//鄰接點(diǎn)序號(hào)為j

      s->next=G->adjlist.firstedge;

      G->adjlist.firstedge=s;//將新結(jié)點(diǎn)*S插入頂點(diǎn)Vi的邊表頭部

      s=(EdgeNode *)malloc(sizeof(EdgeNode));

      s->adjvex=i;//鄰接點(diǎn)序號(hào)為i

      s->next=G->adjlist.firstedge;

      G->adjlist.firstedge=s;//將新結(jié)點(diǎn)*S插入頂點(diǎn)Vj的邊表頭部

      }

      }

      //=========定義標(biāo)志向量,為全局變量=======

      typedef enum{FALSE,TRUE} Boolean;

      Boolean visited;

      //========DFS:深度優(yōu)先遍歷的遞歸算法======

      void DFSM(ALGraph *G,int i)

      { //以Vi為出發(fā)點(diǎn)對鄰接鏈表表示的圖G進(jìn)行DFS搜索

      給出你的編碼

      //==========BFS:廣度優(yōu)先遍歷=========

      void BFS(ALGraph *G,int k)

      { //以Vk為源點(diǎn)對用鄰接鏈表表示的圖G進(jìn)行廣度優(yōu)先搜索

      給出你的編碼

      //==========主函數(shù)===========

      void main()

      {

      int i;

      ALGraph *G;

      G=(ALGraph *)malloc(sizeof(ALGraph));

      CreatALGraph(G);

      printf(”Print Graph DFS: “);

      DFS(G);

      printf(” “);

      printf(”Print Graph BFS: “);

      BFS(G,3);

      printf(” ");

      }

      實(shí)驗(yàn)結(jié)果:

      1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu)

      2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu)

      心得體會(huì):

      實(shí)驗(yàn)6

      實(shí)驗(yàn)題目:二分查找算法的實(shí)現(xiàn)

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握二分查找法的工作原理及應(yīng)用過程,利用其工作原理完成實(shí)驗(yàn)題目中的內(nèi)容。

      實(shí)驗(yàn)要求:

      編寫程序構(gòu)造一個(gè)有序表L,從鍵盤接收一個(gè)關(guān)鍵字key,用二分查找法在L中查找key,若找到則提示查找成功并輸出key所在的位置,否則提示沒有找到信息。

      實(shí)驗(yàn)主要步驟:

      1.建立的初始查找表可以是無序的,如測試的數(shù)據(jù)為{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。

      2.給出算法的遞歸和非遞歸代碼;

      3.如何利用二分查找算法在一個(gè)有序表中插入一個(gè)元素x,并保持表的有序性?

      程序代碼

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      實(shí)驗(yàn)7

      實(shí)驗(yàn)題目:排序

      實(shí)驗(yàn)?zāi)康模?/p>

      掌握各種排序方法的基本思想、排序過程、算法實(shí)現(xiàn),能進(jìn)行時(shí)間和空間性能的分析,根據(jù)實(shí)際問題的特點(diǎn)和要求選擇合適的排序方法。

      實(shí)驗(yàn)要求:

      實(shí)現(xiàn)直接排序、冒泡、直接選擇、快速、堆、歸并排序算法。比較各種算法的運(yùn)行速度。

      實(shí)驗(yàn)主要步驟:

      程序代碼

      實(shí)驗(yàn)結(jié)果:

      心得體會(huì):

      第三篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告(報(bào)告+C語言源代碼)

      目錄

      前言..................................................................................................................2 概要設(shè)計(jì)..................................................................................................................3 1.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)...........................................................................................3 2.1 算法設(shè)計(jì)...................................................................................................3 2.1.1 建立鏈表的算法..............................................................................3 2.1.2 鏈表插入一個(gè)元素的算法..............................................................3 2.1.3 鏈表刪除一個(gè)元素的算法..............................................................3 3.1 ADT描述..................................................................................................4

      4.1

      詳細(xì)設(shè)計(jì)…………………………………………… ……………………………… 4

      4.1.1

      數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)……………………………… ……………………………… 4.4.1.2

      主要偽代碼…… …………………… ……………………………………… 4 軟件測試..................................................................................................................7 心得體會(huì)................................................................................................................11 源代碼...................................................................................................................12 參考文獻(xiàn)………………………………………………………………………...21

      前言

      數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已經(jīng)成為其他理工專業(yè)的熱門選修課。

      隨著計(jì)算機(jī)科學(xué)的技術(shù)和發(fā)展,計(jì)算機(jī)的功能和運(yùn)算速度不斷地提高,其應(yīng)用于信息處理的范圍日益擴(kuò)大。與之相應(yīng)的,計(jì)算機(jī)的加工處理對象也從簡單的數(shù)據(jù)發(fā)展到一般的符號(hào),進(jìn)而發(fā)展到更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu)的表示和操作都涉及到算法,如何描述數(shù)據(jù)的結(jié)構(gòu)和討論有關(guān)的算法,又涉及到程序設(shè)計(jì)語言。因此,它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已經(jīng)成為其他理工專業(yè)的熱門選修課。我們通過對這門基礎(chǔ)課程的學(xué)習(xí),要學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適合的邏輯結(jié)構(gòu),儲(chǔ)存結(jié)構(gòu)及其相應(yīng)的算法,并初步掌握算法時(shí)間分析和空間分析的技術(shù)。通過實(shí)際操作去了解數(shù)據(jù)結(jié)構(gòu)原理,練習(xí)編寫代碼的能力,以及抽象能力。

      從課程性質(zhì)上講,“數(shù)據(jù)結(jié)構(gòu)”是一門專業(yè)技術(shù)基礎(chǔ)課。它的要求是學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)及相應(yīng)的算法,并初步掌握算法的時(shí)間分析和空間分析的技術(shù)。另一方面,數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)過程也是復(fù)雜程序設(shè)計(jì)的訓(xùn)練過程,要求編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的規(guī)范。

      概要設(shè)計(jì)

      1.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

      采用鏈?zhǔn)絻?chǔ)存結(jié)構(gòu)。typedef struct LNode{ ElemType data;struct LNode *next;}LNode,*LinkList;2.1 算法設(shè)計(jì)

      2.1.1 建立鏈表的算法

      (1)算法思想分析

      首先從表尾到表頭逆向建立單鏈表,然后再建立的單鏈表基礎(chǔ)上進(jìn)行對鏈表上的元素進(jìn)行查詢,刪除,插入的操作。(2)要點(diǎn)描述

      首先建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表,通過申請內(nèi)存,先建立一個(gè)空鏈表。然后結(jié)點(diǎn)的插入,建立一個(gè)有多個(gè)結(jié)點(diǎn)的鏈表。在進(jìn)行查詢等操作。(3)時(shí)間和空間復(fù)雜度分析

      程序的時(shí)間復(fù)雜度為O(n)。

      2.1.2 鏈表插入一個(gè)元素的算法

      (1)算法思想分析

      要生成一個(gè)新數(shù)據(jù)域?yàn)閄的結(jié)點(diǎn),然后插入在單鏈表中。(2)要點(diǎn)描述

      在鏈表中插入結(jié)點(diǎn)只需要修改指針。若要在第 i 個(gè)結(jié)點(diǎn)之前插入元素,修改的是第 i-1 個(gè)結(jié)點(diǎn)的指針。

      (3)時(shí)間和空間復(fù)雜度分析

      時(shí)間復(fù)雜度O(n)2.1.3 鏈表刪除一個(gè)元素的算法

      (1)算法思想分析

      要?jiǎng)h除一個(gè)結(jié)點(diǎn),必須修改指針并且釋放空間。(2)要點(diǎn)描述

      找到線性表中第i-1個(gè)結(jié)點(diǎn),修改其指向后繼的指針。

      (3)時(shí)間和空間復(fù)雜度分析

      時(shí)間復(fù)雜度O(n)

      3.1 ADT描述

      ADT LinkList{

      數(shù)據(jù)對象:D={ e | e∈LNode }

      數(shù)據(jù)關(guān)系:R1={ | e∈LNode ,e >0}

      基本操作:

      GreateList_L(&L, n)

      操作結(jié)果:構(gòu)造了一個(gè)長為n的數(shù)據(jù)鏈表

      ListDelete_L(&L, i, &e)

      初始條件:鏈表L已存在而且非空

      操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù),并且用e返回其值

      ListInsert_L(&L, i, e)

      初始條件:鏈表L已存在

      操作結(jié)果: 在L的第i個(gè)位置插入數(shù)據(jù)e

      GetElem(L, i, e)

      初始條件:鏈表L已存在

      操作結(jié)果:用e返回L中的第i個(gè)數(shù)據(jù) }ADT LinkList

      4.1

      詳細(xì)設(shè)計(jì) 4.1.1數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)

      采用單鏈?zhǔn)骄€性表實(shí)現(xiàn)

      4.1.2

      主要偽代碼

      Status GetElem(LinkList L, int i, ElemType *e){ int j=0;int d;LinkList p = L;while(p&&jnext;j++;

      } if(!p || j > i)return ERROR;printf(“您要查詢的元素是:n”);d=p->data;printf(“%d”,d);printf(“n”);}

      void InitList(LinkList *L){ *L =(LinkList)malloc(sizeof(struct LNode));if(!*L)exit(OVERFLOW);(*L)->next = NULL;}

      Status ListInsert(LinkList L, int i, ElemType e){ int j = 0;LinkList p = L, s;while(p && j < i-1){ p = p->next;j++;} if(!p|| j > i-1)return ERROR;s =(LinkList)malloc(sizeof(struct LNode));s->data = e;s->next = p->next;p->next = s;return OK;}

      Status ListDelete(LinkList L, int i, ElemType *e){ int j = 0;LinkList p = L, q;while(p->next && j < i-1){ p = p->next;

      j++;} if(!p->next || j > i-1)return ERROR;q = p->next;p->next = q->next;*e = q->data;free(q);return OK;}

      void ListTraverse(LinkList L, void(*vi)(ElemType)){ LinkList p = L->next;while(p){ vi(p->data);p = p->next;} printf(“n”);}

      void ListPrint(LinkList L){ LinkList p = L->next;while(p){ printf(“%d ”, p->data);p = p->next;} printf(“n”);}

      void printInt(int data){ printf(“%d ”, data);}.軟件測試

      圖一(主界面)

      圖二(插入學(xué)生信息)

      圖三(顯示所有學(xué)生信息)

      圖四(查詢個(gè)人信息)

      圖五(統(tǒng)計(jì)信息)

      圖六(修改信息)

      圖七(保存數(shù)據(jù))

      圖八(刪除信息)

      心得體會(huì)

      通過本程序的設(shè)計(jì),我對數(shù)據(jù)結(jié)構(gòu)作了以下總結(jié):要解決一道程序題必須先要認(rèn)真捕捉改程序中的有用信息,找出解決方法。先規(guī)劃好,程序需要什么樣的數(shù)據(jù)結(jié)構(gòu),什么函數(shù),對程序有什么要求。然后從整體把握對程序設(shè)計(jì)進(jìn)行分工,相應(yīng)地把程序分成若干模塊,具體實(shí)現(xiàn)各部分實(shí)行相應(yīng)的功能。一個(gè)程序要順利地進(jìn)行設(shè)計(jì),一是要對程序的功能有全面的了解,如果漏了某些部分,都會(huì)使得這個(gè)程序調(diào)試不出來或者是令該程序沒有達(dá)到預(yù)想的效果。其次,在程序的編譯中,必須注重程序設(shè)計(jì)過程中的細(xì)節(jié),像單鏈表的程序,就要理解鏈表的概念,理解鏈表的數(shù)據(jù)特點(diǎn),要清楚知道數(shù)據(jù)域和指針域的作用,否則,很容易會(huì)浪費(fèi)大量時(shí)間在檢測錯(cuò)誤上面。要說到解題的思考方向,如果要總結(jié)成規(guī)律,我認(rèn)為要靈活的進(jìn)行方法的設(shè)計(jì),通過不同的方法來實(shí)現(xiàn)不同的功能,如通過結(jié)點(diǎn)的插入來實(shí)現(xiàn)鏈表的創(chuàng)建。同時(shí)應(yīng)該注意各種語句的選擇,要先預(yù)想好需要什么樣的語句來實(shí)現(xiàn)函數(shù)定義,盡量簡單快捷地完成,避免出錯(cuò)。

      要規(guī)范面向?qū)ο蟪绦蛟O(shè)計(jì)師的書寫協(xié)管,在這次課程設(shè)計(jì)中,我們再次感受到,規(guī)范的程序書寫,可以更好的進(jìn)行后期的差錯(cuò)補(bǔ)漏。還應(yīng)該注意各種面向?qū)ο笳Z言語法的運(yùn)用,例如繼承的方法,都要嚴(yán)格按照語法來進(jìn)行,否則很容易就會(huì)出現(xiàn)錯(cuò)誤,甚至嚴(yán)重影響課程設(shè)計(jì)的進(jìn)度。

      源代碼

      #include “stdio.h” #include “stdlib.h” #include “string.h” int shoudsave=0;// struct student {

      char num[10];//學(xué)號(hào)

      char name[20];

      char sex[4];

      int cgrade;

      int mgrade;

      int egrade;

      int totle;

      int ave;

      char neartime[10];//最近更新時(shí)間

      };

      typedef struct node {

      struct student data;

      struct node *next;}Node,*Link;

      int menu(){

      char m[3];

      int n;

      printf(“ ************************歡迎進(jìn)入學(xué)生成績管理系統(tǒng)******************************nn”);

      printf(“t歡迎使用本學(xué)生管理系統(tǒng),本系統(tǒng)將為您提供歷史學(xué)生信息查詢,學(xué)生成績信息管理功能。n”);

      printf(“********************************************************************************”);

      printf(“t1輸入學(xué)生資料ttttt2刪除學(xué)生資料n”);

      printf(“t3查詢學(xué)生資料ttttt4修改學(xué)生資料n”);

      printf(“t5顯示學(xué)生資料ttttt6統(tǒng)計(jì)學(xué)生成績n”);

      printf(“t7保存學(xué)生資料n”);

      printf(“ttplease choose a operation(1-7):n”);

      printf(“***********************************************************************

      *********n”);

      scanf(“%s”,m);

      n=atoi(m);

      return(n);}

      void printstart(){

      printf(“---------n”);}

      void Wrong(){

      printf(“n=====>提示:輸入錯(cuò)誤!n”);}

      void Nofind(){

      printf(“n=====>提示:沒有找到該學(xué)生!n”);}

      void printc()// 本函數(shù)用于輸出中文

      {

      printf(“學(xué)號(hào)t 姓名

      性別

      英語成績 數(shù)據(jù)庫成績 數(shù)據(jù)結(jié)構(gòu)成績

      總分平均分n”);}

      void printe(Node *p)//本函數(shù)用于輸出英文

      {

      printf(“%-12s%stt%st%dtt%dt%dt%dt %dn”,p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);}

      Node* Locate(Link l,char findmess[],char nameornum[])//該函數(shù)用于定位連表中符合要求的接點(diǎn),并返回該指針

      {

      Node *r;

      if(strcmp(nameornum,“num”)==0)//按學(xué)號(hào)查詢

      {

      r=l->next;

      while(r!=NULL)

      {

      if(strcmp(r->data.num,findmess)==0)

      return r;

      r=r->next;

      }

      }

      else if(strcmp(nameornum,“name”)==0)//按姓名查詢

      {

      r=l->next;

      while(r!=NULL)

      {

      if(strcmp(r->data.name,findmess)==0)

      return r;

      r=r->next;

      }

      }

      return 0;}

      void Add(Link l)//增加學(xué)生

      {

      Node *p,*r,*s;

      char num[10];

      r=l;

      s=l->next;

      while(r->next!=NULL)

      r=r->next;//將指針置于最末尾

      while(1)

      {

      printf(“請你輸入學(xué)號(hào)(以'0'返回上一級(jí)菜單:)”);

      scanf(“%s”,num);

      if(strcmp(num,“0”)==0)

      break;

      while(s)

      {

      if(strcmp(s->data.num,num)==0)

      {

      printf(“=====>提示:學(xué)號(hào)為'%s'的學(xué)生已經(jīng)存在,若要修改請你選擇'4 修改'!n”,num);

      printstart();

      printc();

      printe(s);

      printstart();

      printf(“n”);

      return;

      }

      s=s->next;

      }

      p=(Node *)malloc(sizeof(Node));

      strcpy(p->data.num,num);

      printf(“請你輸入姓名:”);

      scanf(“%s”,p->data.name);

      getchar();

      printf(“請你輸入性別:”);

      scanf(“%s”,p->data.sex);

      getchar();

      printf(“請你輸入數(shù)據(jù)結(jié)構(gòu)成績:”);

      scanf(“%d”,&p->data.cgrade);

      getchar();

      printf(“請你輸入數(shù)據(jù)庫成績:”);

      scanf(“%d”,&p->data.mgrade);

      getchar();

      printf(“請你輸入英語成績:”);

      scanf(“%d”,&p->data.egrade);

      getchar();

      p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

      p->data.ave=p->data.totle / 3;

      //信息輸入已經(jīng)完成p->next=NULL;

      r->next=p;

      r=p;

      shoudsave=1;

      } }

      void Qur(Link l)//查詢學(xué)生

      {

      char findmess[20];

      Node *p;

      if(!l->next)

      {

      printf(“n=====>提示:沒有資料可以查詢!n”);

      return;

      }

      printf(“請你輸入要查找的學(xué)號(hào):”);

      scanf(“%s”,findmess);

      p=Locate(l,findmess,“num”);

      if(p)

      {

      printf(“tttt查找結(jié)果n”);

      printstart();

      printc();

      printe(p);

      printstart();

      }

      else

      Nofind();}

      void Del(Link l)//刪除

      {

      Node *p,*r;

      char findmess[20];

      if(!l->next)

      {

      printf(“n=====>提示:沒有資料可以刪除!n”);

      return;

      }

      printf(“n=====>確定進(jìn)行刪除操作請按 1,按其他按鍵退出該操作nnnn”);

      if(menu()==1)

      {

      printf(“請你輸入要?jiǎng)h除的學(xué)號(hào):”);

      scanf(“%s”,findmess);

      p=Locate(l,findmess,“num”);

      if(p)

      {

      r=l;

      while(r->next!=p)

      r=r->next;

      r->next=p->next;

      free(p);

      printf(“n=====>提示:該學(xué)生已經(jīng)成功刪除!n”);

      shoudsave=1;

      }

      else

      Nofind();

      }

      else

      exit;}

      void Modify(Link l)//修改函數(shù) {

      Node *p;

      char findmess[20];

      if(!l->next)

      {

      printf(“n=====>提示:沒有資料可以修改!n”);

      return;

      }

      printf(“請你輸入要修改的學(xué)生學(xué)號(hào):”);

      scanf(“%s”,findmess);

      p=Locate(l,findmess,“num”);

      if(p)

      {

      printf(“請你輸入新學(xué)號(hào)(原來是%s):”,p->data.num);

      scanf(“%s”,p->data.num);

      printf(“請你輸入新姓名(原來是%s):”,p->data.name);

      scanf(“%s”,p->data.name);

      getchar();

      printf(“請你輸入新性別(原來是%s):”,p->data.sex);

      scanf(“%s”,p->data.sex);

      printf(“請你輸入新的數(shù)據(jù)結(jié)構(gòu)成績(原來是%d分):”,p->data.cgrade);

      scanf(“%d”,&p->data.cgrade);

      getchar();

      printf(“請你輸入新的數(shù)據(jù)庫成績(原來是%d分):”,p->data.mgrade);

      scanf(“%d”,&p->data.mgrade);

      getchar();

      printf(“請你輸入新的英語成績(原來是%d分):”,p->data.egrade);

      scanf(“%d”,&p->data.egrade);

      p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;

      p->data.ave=p->data.totle/3;

      printf(“n=====>提示:資料修改成功!n”);

      shoudsave=1;

      }

      else

      Nofind();

      }

      void Disp(Link l)//顯示函數(shù) {

      int count=0;

      Node *p;

      p=l->next;

      if(!p)

      {

      printf(“n=====>提示:沒有資料可以顯示!n”);

      return;

      }

      printf(“tttt顯示結(jié)果n”);

      printstart();

      printc();

      printf(“n”);

      while(p)

      {

      printe(p);

      p=p->next;

      }

      printstart();

      printf(“n”);}

      void Tongji(Link l)//統(tǒng)計(jì)函數(shù) {

      Node *pm,*pe,*pc,*pt,*pa;//用于指向分?jǐn)?shù)最高的接點(diǎn)

      Node *r=l->next;

      if(!r)

      {

      printf(“n=====>提示:沒有資料可以統(tǒng)計(jì)!n”);

      return;

      }

      pm=pe=pc=pt=pa=r;

      while(r!=NULL)

      {

      if(r->data.cgrade>=pc->data.cgrade)

      pc=r;

      if(r->data.mgrade>=pm->data.mgrade)

      pm=r;

      if(r->data.egrade>=pe->data.egrade)

      pe=r;

      if(r->data.totle>=pt->data.totle)

      pt=r;

      if(r->data.ave>=pa->data.ave)

      pa=r;

      r=r->next;

      }

      printf(“------------------------------統(tǒng)計(jì)結(jié)果-n”);

      printf(“總分最高者:t%s %d分n”,pt->data.name,pt->data.totle);

      printf(“平均分最高者:t%s %d分n”,pa->data.name,pa->data.ave);

      printf(“英語最高者:t%s %d分n”,pe->data.name,pe->data.egrade);

      printf(“數(shù)據(jù)庫最高者:t%s %d分n”,pm->data.name,pm->data.mgrade);

      printf(“數(shù)據(jù)結(jié)構(gòu)最高者:t%s %d分n”,pc->data.name,pc->data.cgrade);

      printstart();}

      void Save(Link l)//保存函數(shù) {

      FILE* fp;

      Node *p;

      int flag=1,count=0;

      fp=fopen(“c:student”,“wb”);

      if(fp==NULL)

      {

      printf(“n=====>提示:重新打開文件時(shí)發(fā)生錯(cuò)誤!n”);

      exit(1);

      }

      p=l->next;

      while(p)

      {

      if(fwrite(p,sizeof(Node),1,fp)==1)

      {

      p=p->next;

      count++;

      }

      else

      {

      flag=0;

      break;

      }

      }

      if(flag)

      {

      printf(“n=====>提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n”,count);

      shoudsave=0;

      }

      fclose(fp);}

      void main(){

      Link l;//連表

      FILE *fp;//文件指針

      char ch;

      char jian;

      int count=0;

      Node *p,*r;

      l=(Node*)malloc(sizeof(Node));

      l->next=NULL;

      r=l;

      fp=fopen(“C:student”,“rb”);

      if(fp==NULL)

      {

      fp=fopen(“C:student”,“wb”);

      exit(0);

      }

      printf(“n=====>提示:文件已經(jīng)打開,正在導(dǎo)入記錄......n”);

      while(!feof(fp))

      {

      p=(Node*)malloc(sizeof(Node));

      if(fread(p,sizeof(Node),1,fp))//將文件的內(nèi)容放入接點(diǎn)中

      {

      p->next=NULL;

      r->next=p;

      r=p;//將該接點(diǎn)掛入連中

      count++;

      }

      }

      fclose(fp);//關(guān)閉文件

      printf(“n=====>提示:記錄導(dǎo)入完畢,共導(dǎo)入%d條記錄.n”,count);

      for(;;)

      {

      switch(menu())

      {

      case 1:Add(l);break;//增加學(xué)生

      case 2:Del(l);break;//刪除學(xué)生

      case 3:Qur(l);break;//查詢學(xué)生

      case 4:Modify(l);break;//修改學(xué)生

      case 5:Disp(l);break;//顯示學(xué)生

      case 6:Tongji(l);break;//統(tǒng)計(jì)學(xué)生

      case 7:Save(l);break;//保存學(xué)生

      default: Wrong();

      getchar();

      break;

      }

      }

      }

      參考文獻(xiàn)

      《數(shù)據(jù)結(jié)構(gòu)(C語言版)》----------------清華大學(xué)出版社 嚴(yán)蔚敏 吳偉民 編著 《C語言程序設(shè)計(jì)》------------------------中國鐵道出版社 丁峻嶺 余堅(jiān) 編著

      第四篇:c語言實(shí)驗(yàn)報(bào)告

      學(xué)號(hào):__________ 姓名:__________ 班級(jí):__________ 日期:__________

      指導(dǎo)教師:__________ 成績:__________

      實(shí)驗(yàn)一 上機(jī)操作初步和簡單的C程序設(shè)計(jì)

      一、實(shí)驗(yàn)?zāi)康?、熟悉C語言運(yùn)行環(huán)境Turbo C++3.02、會(huì)簡單的程序調(diào)試

      3、熟悉C語言各種類型數(shù)據(jù)的輸入輸出函數(shù)的使用方法

      4、掌握順序結(jié)構(gòu)程序設(shè)計(jì)

      二、實(shí)驗(yàn)內(nèi)容

      1、上機(jī)運(yùn)行本章3個(gè)例題,熟悉所用系統(tǒng)的上機(jī)方法與步驟。(習(xí)題1.7)

      2、編寫一個(gè)C程序,輸入a、b、c 3個(gè)值,輸出其中最大者。(習(xí)題1.6)

      3、設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取小數(shù)點(diǎn)后2位數(shù)字。注意:在Trubo C++ 3.0中不能輸入漢字,只能輸入英文或拼音。(習(xí)題4.8)

      4、運(yùn)行如下程序,寫出運(yùn)行結(jié)果。第一┆范文網(wǎng)004km.cn整理該文章,版權(quán)歸原作者、原出處所有...#include

      void main()

      {

      int a=1,b=2;

      a=a+b;b=a-b;a=a-b;

      printf(“%d,%dn”,a,b);

      }

      三、實(shí)驗(yàn)步驟與過程

      四、程序調(diào)試記錄

      第五篇:C語言 實(shí)驗(yàn)報(bào)告

      C語言程序設(shè)計(jì)(B)

      (2010-2011-2)

      實(shí)驗(yàn)報(bào)告

      教學(xué)班級(jí): 學(xué)號(hào): 姓名: 課程教師: 實(shí)驗(yàn)輔導(dǎo)教師:

      江西理工大學(xué)

      自由編輯的程序

      一、實(shí)驗(yàn)前的源程序:

      //任意整數(shù)的疊加 #include void main(){ int i,j,sum=0;printf(“please input a int numbern”);scanf(“%d”,&j)for(i=0;i<=j;i++)sum=sum+i;printf(“此數(shù)的疊加=%dn”,sum);}

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before

      `for' [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before `)' 構(gòu)建中止 未命名10: 2 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      //任意整數(shù)的疊加 #include void main(){

      int i,j,sum=0;printf(“please input a int numbern”);scanf(“%d”,&j);for(i=0;i<=j;i++)sum=sum+i;printf(“此數(shù)的疊加=%dn”,sum);}

      二、實(shí)驗(yàn)前的源程序:

      /*小寫字母轉(zhuǎn)大寫字母*/ #include void main(){ char c1,c2;c1='w';

      江西理工大學(xué)

      } c2='s';c1=c1-32;c2=c2-32;printf(“%c,%cn”,c1,c);

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: `c' undeclared(first

      use this function)[Error] D:Program FilesC-Free 4temp未命名11.cpp:9:(Each undeclared

      identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: for each function it

      appears in.)構(gòu)建中止 未命名11: 3 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      /*小寫字母轉(zhuǎn)大寫字母*/ #include void main(){ char c1,c2;c1='w';c2='s';c1=c1-32;c2=c2-32;printf(“%c,%cn”,c1,c2);}

      三、實(shí)驗(yàn)前的源程序:

      /*查看某一年是否為閏年*/ #include void main(){ int year,i;scanf(“%d”,&year);if(year%4==0)

      {

      if(year%100==0)

      {

      if(year%400==0)

      i=1;

      else

      江西理工大學(xué)

      i=0;

      }

      else

      i=1;

      } else

      i=0;if(i)

      printf(“%d 是閏年n”,year);else

      printf(“%d 不是閏年n”,year);}

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名14.cpp:15: parse error before

      `else' [Error] D:Program FilesC-Free 4temp未命名14.cpp:25: parse error at end

      of input 構(gòu)建中止 未命名14: 2 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      /*查看某一年是否為閏年*/ #include void main(){ int year,i;scanf(“%d”,&year);if(year%4==0)

      {

      if(year%100==0)

      {

      if(year%400==0)

      i=1;

      else

      i=0;

      }

      else

      i=1;

      } else

      i=0;if(i)

      江西理工大學(xué)

      printf(“%d 是閏年n”,year);else

      printf(“%d 不是閏年n”,year);}

      數(shù)據(jù)的輸入和輸出

      四、程序改錯(cuò)題

      改錯(cuò)前的源程序;#include void main(){ float x,y,z;scanf(“%5.2f,%5.2f”,&x,&y);z=x+y;printf(“z=%5.2f”,&z);} 修改后的源程序:

      #include void main(){ float x,y,z;scanf(“%f%f”,&x,&y);z=x+y;printf(“z=%5.2f”,z);}

      改錯(cuò)前的源程序;#include void main(){ int x=7654123;x*=10;printf(“x=%7d”,x);} 修改后的源程序:

      江西理工大學(xué)

      #include void main(){

      long x=7654123;x*=10;printf(“x=%7d”,x);}

      改錯(cuò)前的源程序:

      #include void main(){ float c1=67;char c2;c2=c1+5;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%d”,&c1,&c2);} 修改后的源程序:

      #include void main(){ int c1=67;char c2;c2=c1+5;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%d”,c1,c2);}

      五、程序編寫題:已知char ch’b’;int i=3 ,j=5;float x=22.354,y=435.6789;根據(jù)下面的輸出結(jié)果編寫程序。ch =’b’,ASCII=98 i=3□□□□□□j=5 x=22.35□□□y=435.68 實(shí)驗(yàn)前的源程序:

      #include void main()

      江西理工大學(xué){ char ch='b';int i=3,j=5;float x=22.354,y=435.6789;printf(“ch='%c',ASCII=%dn”,ch,ch);printf(“i=%d

      j=%dn”,i,j);printf(“x=%.2f

      y=%.2fn”,x,y);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告:無 實(shí)驗(yàn)后的源程序:

      #include void main(){ char ch='b';int i=3,j=5;float x=22.354,y=435.6789;printf(“ch='%c',ASCII=%dn”,ch,ch);printf(“i=%d

      j=%dn”,i,j);printf(“x=%.2f

      y=%.2fn”,x,y);}

      六、從鍵盤輸入一行字符,統(tǒng)計(jì)其中小寫字母、大寫字母和其它字符的個(gè)數(shù):

      實(shí)驗(yàn)前的源程序:

      #include “stdio.h” void main(){ printf(“請任意輸入一串字符:n”);

      char ch,sum1=0,sum2=0,other=0;

      ch=getchar();

      while(c!='n')

      {

      if(c>='A'&&c<='Z')sum1++;

      else if(c>='a'&&c<='z')sum2++;

      else other++;

      c=getchar();

      } printf(“大寫字母的個(gè)數(shù):%dn”,sum1);printf(“小寫字母的個(gè)數(shù):%dn”,sum2);

      江西理工大學(xué)printf(“其他字符母個(gè)數(shù):%dn”,other);}

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: `c' undeclared(first

      use this function)[Error] D:Program FilesC-Free 4temp未命名7.cpp:7:(Each undeclared

      identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: for each function it

      appears in.)構(gòu)建中止 未命名7: 3 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      #include “stdio.h” void main(){ printf(“請任意輸入一串字符:n”);

      char ch,sum1=0,sum2=0,other=0;

      ch=getchar();

      while(ch!='n')

      {

      if(ch>='A'&&ch<='Z')sum1++;

      else if(ch>='a'&&ch<='z')sum2++;

      else other++;

      ch=getchar();

      } printf(“大寫字母的個(gè)數(shù):%dn”,sum1);printf(“小寫字母的個(gè)數(shù):%dn”,sum2);printf(“其他字符母個(gè)數(shù):%dn”,other);}

      七、使用以下公式求∏的近似值,要求精確到最后一項(xiàng)的絕對值小于10e-4

      ∏/4=1-1/3+1/5-1/7+……

      實(shí)驗(yàn)前的源程序:

      #include “stdio.h” #include “math.h” main(){

      江西理工大學(xué)

      } float sum=0;int i,j;for(i=1;;i++){ j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.o/j);continue;break;} printf(“∏=%fn”,sum*4.0);

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名9.cpp:13: nondigits in number

      and not hexadecimal [Error] D:Program FilesC-Free 4temp未命名9.cpp:19: parse error at end

      of input 構(gòu)建中止 未命名9: 2 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      #include “stdio.h” #include “math.h” main(){ float sum=0;int i,j;for(i=1;;i++){

      j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.0/j);continue;} break;} printf(“∏=%fn”,sum*4.0);}

      八、用選擇法對10個(gè)整數(shù)排序: 實(shí)驗(yàn)前的源程序:

      江西理工大學(xué)#include main(){ printf(“請輸入一串亂序的10個(gè)整數(shù):n”);int a[10];int i,j,k;for(i=0;i<10;i++){

      scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){

      if(a[j]>a[j+1])

      {

      k=a[j];

      a[j]=a[j+1];

      k=a[j+1];} printf(“這10個(gè)整數(shù)從小到大排列為:”);for(j=0;j<10;j++){

      printf(“%d ”,a[j]);} printf(“n”);printf(“這10個(gè)整數(shù)從大到小排列為:”);for(j=9;j>=0;j--){

      printf(“%d ”,a[j]);}

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名1.cpp:33: parse error at end of

      input 構(gòu)建中止 未命名1: 1 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      //用選擇法對10個(gè)整數(shù)排序

      #include void main(){ printf(“請輸入一串亂序的10個(gè)整數(shù):n”);int a[10];

      江西理工大學(xué) int i,j,k;for(i=0;i<10;i++){ scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){ if(a[j]>a[j+1]){

      k=a[j];

      a[j]=a[j+1];

      k=a[j+1];} } printf(“這10個(gè)整數(shù)從小到大排列為:”);for(j=0;j<10;j++){ printf(“%d ”,a[j]);} printf(“n”);printf(“這10個(gè)整數(shù)從大到小排列為:”);for(j=9;j>=0;j--){ printf(“%d ”,a[j]);} }

      九、求一個(gè)3*3的整數(shù)矩陣對角線元素之積:

      實(shí)驗(yàn)前的源程序:

      #include void main(){ int a[3][3];int i,j,ji=1;printf(“請輸入一個(gè)3*3的矩陣:n”);for(i=0;i<=2;i++)for(j=0;j<=2;j++){

      scanf(“%d”,&a[i][j])} for(i=0;i<3;i++)

      江西理工大學(xué) {

      for(j=0;j<3;j++)

      {

      printf(“%d ”,a[i][j]);

      }

      printf(“n”);

      }

      printf(“n”);

      for(i=0;i<3;i++)

      {

      for(j=0;j<3;j++)

      if(i=j)

      ji*=a[i][j];

      printf(“主對角線的積為:%dn”,ji);

      } }

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名4.cpp:11: parse error before

      `}' 構(gòu)建中止 未命名4: 1 個(gè)錯(cuò)誤, 0 個(gè)警告

      實(shí)驗(yàn)后的源程序:

      #include void main(){ int a[3][3];int i,j,ji=1;printf(“請輸入一個(gè)3*3的矩陣:n”);for(i=0;i<=2;i++)for(j=0;j<=2;j++){

      scanf(“%d”,&a[i][j]);} for(i=0;i<3;i++){

      for(j=0;j<3;j++)

      {

      printf(“%d ”,a[i][j]);

      }

      printf(“n”);

      }

      江西理工大學(xué)

      printf(“n”);

      for(i=0;i<3;i++)

      {

      for(j=0;j<3;j++)

      if(i=j)

      ji*=a[i][j];

      printf(“主對角線的積為:%dn”,ji);

      } }

      十、將一個(gè)數(shù)組中的值按你需從新存放。例如,原來順序?yàn)?,6,5,4,1。要求改為1,4,5,6,8。

      實(shí)驗(yàn)前的源程序:

      #include void main(){ int a[10],i,j,t;printf(“請問你要輸個(gè)幾個(gè)數(shù)字: ”);scanf(“%d”,&j);printf(“請輸入大小順序的%d個(gè)數(shù)字: ”,j);for(i=0;i

      scanf(“%d”,&a[i]);}

      for(i=0;i

      t=a[i];

      a[i]=a[j-i-1];

      t=a[j-i-1];} printf(“該數(shù)組逆序排列為:”);

      for(i=0;i

      printf(“%d ”,a[i]);printf(“n”);}

      實(shí)驗(yàn)錯(cuò)誤報(bào)告:

      [Error] D:Program FilesC-Free 4temp未命名3.cpp:25: parse error at end

      of input 構(gòu)建中止 未命名3: 1 個(gè)錯(cuò)誤, 0 個(gè)警告

      江西理工大學(xué)實(shí)驗(yàn)后的源程序:

      #include void main(){ int a[10],i,j,t;printf(“請問你要輸個(gè)幾個(gè)數(shù)字: ”);scanf(“%d”,&j);printf(“請輸入大小順序的%d個(gè)數(shù)字: ”,j);for(i=0;i

      scanf(“%d”,&a[i]);}

      for(i=0;i

      t=a[i];

      a[i]=a[j-i-1];

      a[j-i-1]=t;} printf(“該數(shù)組逆序排列為:”);

      for(i=0;i

      printf(“%d ”,a[i]);} printf(“n”);}

      江西理工大學(xué)

      下載數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)(C語言版) 實(shí)驗(yàn)報(bào)告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        C語言實(shí)驗(yàn)報(bào)告

        C語言程序設(shè)計(jì)(B) (2010-2011-2) 實(shí)驗(yàn)報(bào)告 教學(xué)班級(jí): 學(xué)號(hào): 姓名:課程教師:王華金 實(shí)驗(yàn)輔導(dǎo)教師:王華金 江西理工大學(xué)1 P123--五、1、編寫函數(shù),找出5*5數(shù)組對角線上元素的最小值,并在......

        c語言實(shí)驗(yàn)報(bào)告

        實(shí)驗(yàn)一 熟悉C語言程序的運(yùn)行環(huán)境 一、實(shí)驗(yàn)?zāi)康?1、了解在該系統(tǒng)上如何編輯、編譯、連接和運(yùn)行一個(gè)C 程序; 2、通過運(yùn)行簡單的C程序,初步了解C程序的特點(diǎn)。 二、實(shí)驗(yàn)預(yù)習(xí)1、......

        c語言實(shí)驗(yàn)報(bào)告

        南昌大學(xué)實(shí)驗(yàn)報(bào)告 學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): √ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績: 實(shí)驗(yàn)類型:□ 驗(yàn)證 □一.實(shí)驗(yàn)名稱 實(shí)驗(yàn)3 控制語句 二.實(shí)驗(yàn)?zāi)康?1.熟練掌握if 、if…el......

        c語言實(shí)驗(yàn)報(bào)告

        計(jì)算機(jī)軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一:線性表的排序與查找 一.實(shí)驗(yàn)內(nèi)容 a) 鍵盤輸入一組無序數(shù)據(jù),添加到線性表中; b) 排序線性表并輸出排序結(jié)果; c) 鍵盤輸入一個(gè)數(shù),并插入到排好......

        C語言實(shí)驗(yàn)報(bào)告

        鄭州輕工業(yè)學(xué)院 實(shí) 踐 報(bào) 告 實(shí)現(xiàn)內(nèi)容: OJ1123最佳校友(數(shù)組)、OJ1158又是升序(指針)、OJ1180成績統(tǒng)計(jì)(結(jié)構(gòu))、OJ1203做幻方(文件) 學(xué)號(hào):541507020140 學(xué)生姓名:王紅旭 專業(yè)班級(jí):電子信......

        C語言實(shí)驗(yàn)報(bào)告

        實(shí)驗(yàn)一 C程序的運(yùn)行環(huán)境和方法 一、實(shí)驗(yàn)?zāi)康?1.了解所用的計(jì)算機(jī)系統(tǒng)。 2.了解在該系統(tǒng)上如何進(jìn)行編輯、編譯、連接和運(yùn)行一個(gè)C程序。 3.通過運(yùn)行簡單的C程序了解C程序的特點(diǎn)。 二......

        C語言實(shí)驗(yàn)報(bào)告

        C語言程序設(shè)計(jì)(B) (2010-2011-2) 實(shí)驗(yàn)報(bào)告2 教學(xué)班級(jí): 學(xué)號(hào): 姓名:課程教師: 實(shí)驗(yàn)輔導(dǎo)教師: 一、做一個(gè)“楊輝三角” 實(shí)驗(yàn)前的源程序: /*楊輝三角*/ #include void fun(int Y[][]......

        C語言實(shí)驗(yàn)報(bào)告

        C語言程序設(shè)計(jì)實(shí)驗(yàn) --------指針應(yīng)用實(shí)驗(yàn) ========================山東農(nóng)業(yè)大學(xué)實(shí)驗(yàn)報(bào)告 課程名稱: c語言程序設(shè)計(jì)實(shí)驗(yàn) 學(xué)院: 水利土木工程學(xué)院 專業(yè): 道路橋梁與渡河工程......