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

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

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

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

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

      軟件技術基礎實驗報告

      時間:2019-05-11 23:48:39下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《軟件技術基礎實驗報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《軟件技術基礎實驗報告》。

      第一篇:軟件技術基礎實驗報告

      《軟件開發(fā)技術基礎》

      實驗報告

      學院:XX學院

      班級:XX

      姓名: XX

      學號:XX

      《軟件開發(fā)技術基礎》實驗報告

      實驗名稱:實驗一 順序表的操作

      班 級 學 號 姓 名 第 周 星 期 節(jié) 成 績

      一、實驗目的:

      1、掌握順序表結構的實現方式;

      2、掌握順序表常用算法的實現;

      3、熟悉利用順序表解決問題的一般思路;

      4、參照給定的順序表的程序樣例,驗證給出的順序表的常見算法,領會順序表結構的優(yōu)點和不足。

      二、實驗要求:

      1、掌握順序表的特點及常見算法。

      2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1、設計一個靜態(tài)數組存儲結構的順序表,要求編程實現如下任務:

      (1)建立一個順序表,首先依次輸人整數數據元素(個數根據需要鍵盤給定)。(2)刪除指定位置的數據元素(指定元素位置通過鍵盤輸入),再依次顯示刪除后的順序表中的數據元素。

      (3)查找指定數據的數據元素(指定數據由鍵盤輸入),若找到則顯示位置,若沒有找到則顯示0。

      2、使用順序表實現一個電話本的管理程序,電話本中的每條記錄包括學號、姓名、手機號碼和固定電話四項。要求實現菜單、初始化、添加、刪除和顯示等功能。

      四、程序要求:

      1、采用順序表實現,假設該順序表的數據元素個數在最壞情況下不會超過50個。

      2、寫出完整的程序并能調試運行。

      五、實驗結果:

      1、順序表的結果:

      2、電話簿的結果:

      六、實驗中遇到的問題及解決方法:

      1.在刪除數據的時候如果有兩個一樣的數時要怎樣解決? 解決方法:用while進行判斷。

      2.在刪除操作中,刪除函數中的l是指針,所以用->指向,而在主函數中l(wèi)是結構體,用“.”。3.在查找的時候有一個返回值,而這個返回值是指針,所以在寫查找函數的時候要把返回值類型寫上。

      七、實驗心得體會:

      一開始不知所措,首先應該有一個大的方向,把主程序編號,再逐步求精,落實到每一個函數的編寫。對于c語言要熟練掌握,要熟悉循環(huán)等得操作,要熟練掌握順序表中的插入,刪除,查找,的基本函數。在此的基礎上靈活使用。附:

      1、順序表的程序: #include #include #include #include #define MAXSIZE 50

      struct Seqlist {

      };Seqlist *init(){

      } void insert(Seqlist *p){

      int num=0;printf(“請輸入要鍵入的個數:”);scanf(“%d”,&num);if(num<1)printf(“鍵入的數據個數錯誤!n”);Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;int data[MAXSIZE];int length;else {

      printf(“鍵入數據為:n”);for(;num>0;num--){ p->length++;scanf(“%d”,p->data+p->length-1);

      }

      }

      } if(p->length==MAXSIZE){

      } printf(“數組已滿n”);break;getchar();void deletee(Seqlist *p){

      } int find(Seqlist *p){ int i=0;printf(“請輸入要刪除元素的位置:”);scanf(“%d”,&i);if(i<1||i>p->length)printf(“表中沒有第%d個元素!n”,i);else {

      } getchar();for(int j=i;j<=p->length-1;j++)p->data[j-1]=p->data[j];p->length--;

      } int x;printf(“請輸入要查找的數據:”);scanf(“%d”,&x);for(int i=0;i

      length;i++){

      } if(i>=p->length)printf(“數組中沒有此數據!n”);if(p->data[i]==x){

      } printf(“此數據位于第%d個位置n”,i+1);return i+1;getchar();return 0;void display(Seqlist *p){

      } int main(void){ Seqlist *p;for(int i=0;i

      length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();

      p=init();char flag;printf(“1-插入 2-刪除 3-查找 4-顯示 0-退出n”);while(1){

      printf(“請輸入操作:”);switch(flag=getchar()){ case '1':insert(p);putchar('n');break;case '2':deletee(p);printf(“刪除后數據為:”);display(p);putchar('n');getchar();break;case '3':find(p);putchar('n');getchar();break;case '4':printf(“顯示數據為:”);display(p);putchar('n');break;case '0':free(p);return 0;}

      }

      }

      2、電話簿的程序: #include #include #include #include using namespace std;typedef struct contact {

      string name;string phonenumber;string phone;contact *next;}CNT;class Phonebook { public:

      Phonebook();CNT *Input();CNT *Turn_to_end();void Add();void Delete();void Showmenu();CNT *Find();void Show_item(CNT *p);void Display();void Modification();private: };

      Phonebook::Phonebook(){ head=new CNT;CNT *head;

      } head->next=NULL;void Phonebook::Show_item(CNT *p){ cout<<“|----姓名----|--電話號碼--|-------------地址------------|”<name<<'|'<phonenumber<<'|'<phone<<'|'<

      }

      void Phonebook::Display(){

      CNT *p;cout<<“|----姓名----|--電話號碼--|-------------地址------------|”<next;p!=NULL;p=p->next)cout<<'|'<name<<'|'<phonenumber<<'|'<phone<<'|'<

      }

      cout<<“|------------------------|”<

      CNT *Phonebook::Input(){

      }

      CNT *Phonebook::Turn_to_end(){

      } CNT *temp=head;while(temp->next!=NULL){ } cout<<“n”;return temp;temp=temp->next;CNT *temp;temp=new CNT;cout<<“請輸入姓名:”;cin>>temp->name;cout<<“請輸入手機號碼:”;cin>>temp->phonenumber;cout<<“請輸入固定電話:”;cin>>temp->phone;temp->next=NULL;cout<<“n”;return temp;

      void Phonebook::Add(){

      }

      void Phonebook::Delete(){

      CNT *p,*q;q=p=head;string data;cout<<“請輸入要刪除聯系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;CNT *temp,*p;temp=Input();p=Turn_to_end();p->next=temp;cout<<“n”;p=p->next)

      q=p;if(p!=NULL){ q->next=p->next;delete p;

      } } else cout<<“該信息不存在”<

      }

      CNT *Phonebook::Find(){

      CNT *p=head;string data;cout<<“請輸入要查找或要修改的聯系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;cout<<“ 電話簿”<next);

      if(p!=NULL)Show_item(p);else

      } cout<<“不存在該信息”<

      }

      int main(){ int select;Phonebook phbook;CNT *p;p=Find();if(p!=NULL){

      } cout<<“n”;cout<<“請輸入姓名:”;cin>>p->name;cout<<“請輸入手機號碼:”;cin>>p->phonenumber;cout<<“請輸入固定電話:”;cin>>p->phone;

      phbook.Showmenu();while(1){

      cout<<“n請輸入要選擇的操作(0~6):”;cin>>select;getchar();switch(select){ case 0: exit(0);break;case 1: phbook.Add();break;case 2: phbook.Display();break;case 3: phbook.Delete();break;case 4: phbook.Find();break;case 5: phbook.Modification();break;

      } } } return 0;

      實驗名稱:實驗二 鏈表的操作

      (一)班 級 學 號 姓 名 第 周 星 期

      節(jié) 成 績

      一、實驗目的:

      1、掌握單鏈表結構的實現方式;

      2、掌握單鏈表常用算法的實現。

      二、實驗要求:

      1、掌握鏈表的特點及常見算法。

      2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1、設計一個鏈表,要求編程實現如下任務:

      (1)建立一個鏈表,首先依次輸人整數數據元素(個數根據需要鍵盤給定)。(2)刪除指定值的結點(指定值通過鍵盤輸入),再依次顯示刪除后的鏈表中的數據元素。

      (3)查找指定值的結點(指定數據由鍵盤輸入),若找到則顯示查找成功,若沒有找到則顯示查找失敗。

      (4)在第i個節(jié)點(i由鍵盤輸入,i=0表示插入的結點作為第1個結點)之后插入一個元素為x的節(jié)點。

      四、程序要求:

      1、采用鏈表實現,假設該鏈表的結點數在最壞情況下不會超過40個。

      2、寫出完整的程序并能調試運行。

      五、實驗結果:

      六、實驗中遇到的問題及解決方法: 問題:在查找數據時顯示的是一樣的?

      解決方法:在查找函數前要標明返回值的類型lnode *find。

      七、實驗心得體會:

      首先要把書上的關于單鏈表的定義理解,在這個的基礎上使用它。單鏈表通過結點在數據后附加后繼元素的指針信息,可以更靈活的添加,刪除,查找,插入,元素。要清楚指針的指向。首先要定義一個頭結點,并且指針域要為空。將各個操作分別編寫函數,有利于分塊使用而且可以多次使用。附:

      #include int a[50],leng=0;void delet();void chazhao();void main()

      { cout<<“請輸入數組的個數(小于50):”;cin>>leng;cout<<“請輸入數據:”;for(int i=0;i>a[i];int y;cout<<“n”;do { cout<<“請選擇:1-刪除 2-查找 0 退出”<>y;if(y==1)delet();cout<<“n”;if(y==2)chazhao();cout<<“n”;} void delet(){ cout<<“請輸入刪除的數的位置: ”;}while(y!=0);int i;cin>>i;if(i>=leng){ cout<<“數組的的長度小于你刪除的位置”<

      } for(int j=i;j>temp;for(int i=0;i

      {

      if(a[i]==temp){ x=i+1;cout<<“你要查找的數是數組的第”<

      } } if(x==0)cout<<“數組中沒有你要查找的數”;}

      實驗名稱:實驗三 鏈表的操作

      (二)班 級 學 號 姓 名 第 周 星 期

      節(jié) 成 績

      一、實驗目的:

      1、熟悉利用線性鏈表解決問題的一般思路;

      2、參照給定的鏈表的程序樣例,驗證給出的鏈表的常見算法,了解單鏈表結構的優(yōu)點和不足。

      二、實驗要求:

      1、熟練掌握鏈表的使用,并能運用其解決些常規(guī)問題。

      2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1、使用鏈表實現一個電話本的管理程序,電話本中的每條記錄包括姓名和電話兩項。要求實現菜單、初始化、添加、刪除和顯示等功能。

      四、程序要求:

      1、采用鏈表實現,假設該鏈表的結點數在最壞情況下不會超過40個。

      2、寫出完整的程序并能調試運行。

      五、實驗結果:

      六、實驗中遇到的問題及解決方法: 1.實驗結果版面不好看

      解決方法:反復調試執(zhí)行,每次都對自己不滿意的地方進行一些改正。2.怎樣比較name與s->name?

      解決方法:用string.h中的strcmp函數。3.在傳遞數據時有問題?

      解決方法:返回的值要注意數據類型,是指針還是整數等。

      七、實驗心得體會:

      在應用中可以利用while實現選擇,并根據選擇用switch來完成選擇。為了簡化編程,結點插入操作可僅僅在頭部進行。單鏈表的方法使添加操作更加簡便。不需要事先分配結點空間,而是在需要時動態(tài)的申請,節(jié)省了空間。、附:

      #include #include #include #include typedef struct Student { char stu_number[12];char stu_name[12];char stu_phone[12];struct Student *next;}STU;

      void show_menu(){ puts(“1添加 2刪除 3查找 4插入 5顯示 0退出”);}

      void show_item(STU *p){ printf(“|編號| 學號 | 姓名 | 電話號碼 |n”);printf(“|1 |%-12s|%-12s|%-12s|n”,p->stu_number,p->stu_name,p->stu_phone);

      }

      STU *init(){ STU *p;p=(STU *)malloc(sizeof(STU));p->next=NULL;return p;}

      void display(STU *head){ int i;STU *p;p=head->next;printf(“|編號| 學號 | 姓名 | 電話號碼 |n”);for(i=1;p!=NULL;i++,p=p->next){

      printf(“|%-4d|%-12s|%-12s|%-12s|n”,i,p->stu_number,p->stu_name,p->stu_phone);} }

      STU *turn_to_end(STU *head){ STU *p;for(p=head;p->next!=NULL;p=p->next);return p;}

      STU *putin(){ STU *temp;temp=(STU *)malloc(sizeof(STU));printf(“請輸入姓名:”);gets(temp->stu_name);printf(“請輸入學號:”);gets(temp->stu_number);printf(“請輸入電話號碼:”);gets(temp->stu_phone);temp->next=NULL;return temp;}

      void add(STU *head){ STU *temp,*p;p=head;temp=putin();p=turn_to_end(head);p->next=temp;}

      STU *find(STU *head,int i){ STU *p;if(i<1)

      puts(“輸入錯誤”);else {

      for(p=head;p->next!=NULL&&i>0;i--,p=p->next);

      if(i>0)

      {

      puts(“不存在該結點”);

      return NULL;

      } } return p;} STU *find_stu(STU *head,char *data){ STU *p,*q;q=p=head;for(p=head->next;p!=NULL&&strcmp(p->stu_name,data)!=0&&strcmp(p->stu_number,data)!=0&&strcmp(p->stu_phone,data)!=0;p=p->next)

      q=p;if(p!=NULL)

      return q;else {

      puts(“不存在該信息”);

      return p;} } void delet(STU *head,char *data){ STU *p,*q;p=q=head;q=find_stu(head,data);if(q!=NULL){

      p=q->next;

      q->next=p->next;

      free(p);} } void insert(STU *head,int i)

      { STU *p,*q,*temp;q=p=head;if(i<0)

      puts(“輸入錯誤”);else if(i==0){

      temp=putin();

      temp->next=p->next;

      q->next=temp;

      } else if(find(head,i)!=NULL){

      q=find(head,i);

      p=q->next;

      temp=putin();

      q->next=temp;

      temp->next=p;} else

      return;}

      int main(void){ STU *head,*temp;int selct,node;char data[12];head=init();show_menu();while(1){

      printf(“請選擇操作:”);

      scanf(“%d”,&selct);

      getchar();

      switch(selct)

      {

      case 1:

      add(head);

      putchar('n');

      break;

      case 2:

      display(head);

      printf(“請輸入要刪除學生的學號、姓名或電話號碼:”);

      }

      scanf(“%s”,data);

      getchar();

      delet(head,data);

      display(head);

      putchar('n');

      break;case 3:

      puts(“請輸入要查找的數據”);

      scanf(“%s”,data);

      getchar();

      if(temp=find_stu(head,data))

      {

      show_item(temp->next);

      }

      else

      puts(“ 不存在該信息”);

      putchar('n');

      break;case 4:

      puts(“請輸入要插入結點的位置”);

      scanf(“%d”,&node);

      getchar();

      insert(head,node);

      putchar('n');

      break;case 5:

      display(head);

      putchar('n');

      break;case 0:

      exit(0);

      break;} } return 0;

      實驗名稱:實驗四 棧的操作

      班 級 學 號 姓 名 第 周 星 期 節(jié)

      成 績

      一、實驗目的:

      掌握棧的的定義和運算,了解棧的應用。

      二、實驗要求:

      1、掌握棧的特點及常見算法。

      2、參照給定的棧的程序樣例,驗證給出的棧的常見算法。

      3、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1、堆棧的測試和應用。要求:

      設計一個主函數實現對順序堆棧代碼進行測試。測試方法為:依次把數據元素1,3,5,7,9入棧,然后出棧堆棧中的數據元素并在屏幕上顯示。

      四、程序要求:

      1、棧的長度自行確定。

      2、重點理解棧的算法思想,能夠根據實際情況選擇合適的存儲結構。

      3、寫出完整的程序并能調試通過。

      五、實驗結果:

      六、實驗中遇到的問題及解決方法:

      七、實驗心得體會:

      棧是后進先出表,只允許在棧頂進行插入和刪除。要掌握順序棧初始化,出棧,入棧的基本程序,在理解得基礎上加以運用。要清楚棧和單鏈表的區(qū)別。附:

      #include #include using namespace std;class Sqstack { private: int *data;int top;int maxsize;public: Sqstack();void push();void pop(int &);void display();void modify();};Sqstack::Sqstack(){ top=-1;maxsize=5;data=new int[maxsize];}

      void Sqstack::push(){ int temp;if(top>=maxsize-1){

      cout<<“堆棧已滿”<

      cout<<“請輸入要進棧數的值”<

      cin>>temp;

      top++;

      *(data+top)=temp;}

      }

      void Sqstack::pop(int &e){ if(top>-1){

      e=*(data+top);

      top--;

      cout<

      cout<<“堆棧已空”;} cout<-1){

      i=top;

      for(;i>=0;i--)

      cout<<*(data+i)<<“ ”;} else

      cout<<“空?!?cout<

      void Sqstack::modify(){ int temp;cout<<“請輸入棧的長度”<>temp;if(temp>0)

      maxsize=temp;else

      cout<<“輸入錯誤棧的長度必須>0”<

      int main(){ Sqstack test;int temp,select;cout<<“1.進棧 2.出棧 3.顯示 4修改棧長度 0.退出”<

      cout<<“請選擇操作:”;

      cin>>select;

      switch(select)

      {

      case 1:

      test.push();

      break;

      case 2:

      test.pop(temp);

      break;

      case 3:

      test.display();

      break;

      case 4:

      test.modify();

      break;

      case 0:

      exit(0);

      break;

      default:

      cout<<“輸入錯誤按任意鍵重新輸入”<

      getch();

      break;

      } } return 0;}

      實驗名稱:實驗五 隊列的操作

      班 級 學 號 姓 名 第 周 星 期 節(jié)

      成 績

      一、實驗目的:

      掌握隊列的定義及其運算,了解隊列的應用。

      二、實驗要求:

      1、掌握隊列的特點及常見算法。

      2、參照給定的隊列的程序樣例,驗證給出的隊列的常見算法。

      3、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1、隊列測試和應用。要求:

      設計一個主函數對循環(huán)隊列代碼進行測試。測試方法為:依次把數據元素2,4,6,8,10入隊,然后出隊中的數據元素并在屏幕上顯示。

      四、程序要求:

      1、隊列的長度由自行確定。

      2、重點理解隊列的算法思想,能夠根據實際情況選擇合適的存儲結構。

      3、寫出完整的程序并能調試通過。

      五、實驗結果

      六、實驗中遇到的問題及解決方法:

      七、實驗心得體會:

      隊列是只允許在一端進行刪除操作的線性表。在操作時會有假溢出的情況出現,可以將存放隊列元素的數組守衛(wèi)相接,形成循環(huán)隊列。即:rear=(rear+1)%m;Front=(front+1)%m 附:

      #include #include using namespace std;

      typedef struct Temp {

      int data;

      struct Temp *next;}T;class Linksqueue { private: T *front,*rear;public: Linksqueue();void Enqueue();void Dequeue(T *);void display();};

      Linksqueue::Linksqueue(){ front=rear=new(T);front->next=NULL;}

      void Linksqueue::Enqueue(){ T *temp;temp=new(T);cout<<“請輸入入隊元素的值:”<>temp->data;temp->next=NULL;rear->next=temp;rear=temp;}

      void Linksqueue::Dequeue(T *s){ T *temp;if(front->next!=NULL){

      temp=front;

      front=front->next;

      *s=*front;

      cout<<“出隊元素的值:n”<data<

      delete temp;}

      else

      cout<<“隊列已空”<

      void Linksqueue::display(){ T *temp;if(front==rear)

      cout<<“空隊”<

      cout<<“隊列所有元素為 front-> ”;

      for(temp=front->next;temp->next!=NULL;temp=temp->next)

      {

      cout<data<<“t”;

      }

      cout<data;

      cout<<“->rear”<

      int main(){ Linksqueue temp;T * a;a=new(T);int select;cout<<“1入隊 2出隊 3顯示 0退出”<

      cout<<“請選擇操作:”;

      cin>>select;

      switch(select)

      {

      case 1:

      temp.Enqueue();

      break;

      case 2:

      temp.Dequeue(a);

      break;

      case 3:

      temp.display();

      break;

      case 0:

      }

      exit(0);

      break;default:

      cout<<“輸入錯誤按任意鍵重新輸入”<

      getch();

      break;} } return 0;

      實驗名稱:實驗六 二叉樹的生成與遍歷

      班 級 學 號 姓 名 第 周 星 期

      節(jié) 成 績

      一、實驗目的:

      1、熟悉二叉樹節(jié)點的定義和生成方式;

      2、熟悉二叉樹鏈式結構的生成方式;

      3、掌握二叉樹遍歷算法的實現。

      二、實驗要求:

      1、掌握二叉樹的常見算法。

      2、參照給定的二叉樹的程序樣例,驗證給出的有關二叉樹的常見算法,并實現有關的操作。

      3、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1.設計實現二叉樹的建立及遍歷算法,要求:

      (1)編寫創(chuàng)建二叉鏈式存儲結構的二叉樹程序并輸出。(2)編寫遞歸實現二叉樹的先序、中序、后序遍歷算法。

      (3)編寫主函數測試以上二叉樹的創(chuàng)建和遍歷函數。2.假設二叉樹采用鏈式存儲結構進行存儲,編寫程序實現二叉樹的所有葉子結點的統計并輸出統計個數。

      四、實驗結果:

      五、實驗中遇到的問題及解決方法:

      調試的時候顯示沒有錯誤但是程序運行不出來? 在if語句中的相等要用“==”。要注意??!

      六、實驗心得體會:

      二叉樹的遍歷有先序,中序,后序遍歷。這三種遍歷都是用遞歸的形式實現的。而二叉樹的插入結點的算法與許多因素有關,我們要在理解二叉樹結構的基礎上根據需要來編寫程序。我在實驗中使用的二叉排序樹可以作為靜態(tài)查找表使用也可以作為動態(tài)查找表。附:

      #include #include #include #define maxsize 1024 typedef char datatype;typedef struct node { datatype data;struct node *lchild, *rchild;}bitree;bitree *CREATREE()//建立二叉樹函數,函數返回值指向根節(jié)點指針 { char ch;bitree *Q[maxsize];int front,rear;bitree *root,*s;root=NULL;

      front=1;rear=0;printf(“請輸入二叉樹的各節(jié)點,@表示虛節(jié)點,#表示節(jié)點:n”);scanf(“%c”,&ch);while(ch!='#'){

      putchar(ch);

      s=NULL;

      if(ch!='@')

      {

      s=(bitree *)malloc(sizeof(bitree));s->data=ch;

      s->lchild=NULL;

      s->rchild=NULL;

      }

      rear++;

      Q[rear]=s;

      if(rear==1)root=s;

      else

      {if(s&&Q[front])

      if(rear%2==0)

      Q[front]->lchild=s;

      else Q[front]->rchild=s;

      if(rear%2==1)

      front++;

      }scanf(“%c”,&ch);} return root;} void preorder(bitree *p){ if(p!=NULL){

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

      preorder(p->lchild);

      preorder(p->rchild);} return;} void inorder(bitree *p){ if(p!=NULL){

      inorder(p->lchild);

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

      inorder(p->rchild);} return;} void postorder(bitree *p){ if(p!=NULL){

      postorder(p->lchild);

      postorder(p->rchild);

      printf(“%c”,p->data);} return;} int yzjd(bitree *t){ if(t==NULL)return(0);if(t->lchild==NULL&&t->rchild==NULL)return(1);

      return(yzjd(t->lchild)+yzjd(t->rchild));} void main(){ bitree *root;root=CREATREE();

      printf(“n先序遍歷結果如下:n”);preorder(root);printf(“n中序遍歷結果如下:n”);inorder(root);printf(“n后序遍歷結果如下:n”);postorder(root);printf(“n葉子節(jié)點的個數為:%dn”,yzjd(root));

      printf(“n”);} 實驗名稱:實驗七 查找算法實現

      班 級 學 號 姓 名 第 周 星 期

      節(jié) 成 績

      一、實驗目的:

      掌握各種查找算法的特點,測試并驗證查找常見算法。

      二、實驗要求:

      1、參照各種查找算法程序樣例,驗證給出的查找常見算法。

      2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      1.建立有序表,采用折半查找實現某一已知的關鍵字的查找。

      2.利用折半查找算法在一個有序表中插入一個元素,并保持表的有序性。

      四、實驗結果:

      五、實驗中遇到的問題及解決方法:

      六、實驗心得體會:

      本實驗使用的是折半法查找,優(yōu)點是查找效率高,在編程的時候要設置low,high,mid,分別表示區(qū)間和中間位置的值。

      附:

      #include #include #include #include #define MAXSIZE 100 struct Seqlist {

      };

      Seqlist * init()int data[MAXSIZE];int length;

      {

      }

      void insert(Seqlist *p){

      int num=0;printf(“請輸入要鍵入的個數:n”);if(num<1){

      } int temp;for(int i=1;i

      length;i++)

      for(int j=0;j

      length-i;j++)

      if(p->data[j]>p->data[j+1]){

      } temp=p->data[j];p->data[j]=p->data[j+1];p->data[j+1]=temp;printf(“請輸入數據:n”);for(;num>0;num--){

      }

      p->length++;scanf(“%d”,p->data+p->length-1);if(p->length==MAXSIZE){

      }

      printf(“數組已滿n”);break;printf(“輸入個數有誤n”);else Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;scanf(“%d”,&num);

      } getchar();int binsearch(Seqlist *p){

      } void display(Seqlist *p){

      }

      int main(void){

      Seqlist *p;char flag;p=init();int i;for(i=0;i

      length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();int low,high,mid,key;low=0;high=p->length-1;printf(“請輸入要查找的數據:n”);scanf(“%d”,&key);getchar();while(low<=high){

      } return 0;mid=(low+high)/2;if(key==p->data[mid]){

      } else if(key

      data[mid])high=mid-1;else low=mid+1;printf(“此數據位于第%d位置n”,mid+1);return mid+1;

      } printf(“1-插入 2-折半法查找 3-顯示 0-退出n”);while(1){

      } return 0;printf(“請輸入操作:”);switch(flag=getchar()){ case '1' : insert(p);break;case '2' : binsearch(p);break;case '3' : printf(“所有數據為:”);display(p);break;case '0' : free(p);return 0;} 實驗名稱:實驗八 排序綜合實驗

      班 級 學 號 姓 名 第 周 星 期

      節(jié) 成 績

      一、實驗目的:

      參照各種排序算法程序樣例,驗證給出的排序常見算法。

      二、實驗要求:

      1、掌握各種排序算法的特點,測試并驗證排序的常見算法。

      2、提交實驗報告,報告內容包括:目的、要求、算法描述、程序結構、主要變量說明、程序清單、調試情況、設計技巧、心得體會。

      三、實驗內容:

      輸入一組關鍵字序列分別實現下列排序,并將上述幾種排序的算法編寫成菜單,根據輸入的數字不同執(zhí)行對應的排序算法(任選兩種排序方法實現)。

      1、直接插入排序。

      2、希爾排序。

      3、冒泡排序。

      4、直接選擇排序。

      5、快速排序。

      6、堆排序。

      7、歸并排序。

      8、基數排序。

      四、實驗結果:

      五、實驗中遇到的問題及解決方法: 怎樣實現待排序數據長度從鍵盤輸入? 解決方法:設置一個n,從鍵盤輸入n的值。

      六、實驗心得體會:

      排序的常用方法有直接插入排序,簡單選擇排序,冒泡排序,快速排序。我在實驗中用了冒泡排序和快速排序,冒泡排序的程序比較簡單容易理解而快速排序則比較復雜??焖倥判蛞葎澐中蛄腥缓蠼⒃趧澐只A上進行排序,這個排序是由遞歸實現的。但是快速排序的優(yōu)點是排序比較快。附:

      #include #include #include #include #define MAXSIZE 100 struct Seqlist { int data[MAXSIZE];int length;};

      Seqlist * init(){

      Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;} void insert(Seqlist *p){ int num=0;printf(“請輸入要鍵入的個數:n”);scanf(“%d”,&num);if(num<1)

      printf(“輸入個數有誤n”);else{

      printf(“請輸入數據:n”);

      for(;num>0;num--)

      {

      p->length++;

      scanf(“%d”,p->data+p->length-1);

      if(p->length==MAXSIZE)

      printf(“數組已滿n”);

      } } getchar();} void bublesort(Seqlist *p){ int temp;for(int i=1;i

      length;i++)

      for(int j=0;j

      length-i;j++)

      if(p->data[j]>p->data[j+1])

      {

      temp=p->data[j];

      p->data[j]=p->data[j+1];

      p->data[j+1]=temp;

      } } void insertsort(Seqlist *p){ int i,j,temp;for(i=1;i

      length;i++){

      temp=p->data[i];

      j=i;

      while(j>0&&temp

      data[j-1])

      {

      p->data[j]=p->data[j-1];

      j--;

      }

      p->data[j]=temp;} } void display(Seqlist *p){ int i;for(i=0;i

      length;i++)

      printf(“%-5d”,p->data[i]);putchar('n');getchar();} int main(void){ Seqlist *p,*q;char flag;p=init();q=(Seqlist *)malloc(sizeof(Seqlist));q->length=0;printf(“1-輸入數據 2-直接插入排序 3-冒泡排序 4-顯示 0-退出n”);while(1){

      printf(“請輸入操作:”);

      switch(flag=getchar())

      {

      case '1' : insert(p);break;

      case '2' : *q=*p;insertsort(q);printf(“直接插入排序后的數據為:”);display(q);break;

      case '3' : *q=*p;bublesort(q);printf(“冒泡排序后的數據為:”);display(q);break;

      case '4' : printf(“原數據為:”);display(p);break;

      case '0' : free(p);return 0;

      } } return 0;}

      第二篇:計算機軟件技術基礎實驗報告

      計算機軟件技術基礎

      實驗報告

      自動化0901班

      郝萬福

      學號:20092395 實驗1:線性表的排序與查找

      目的:

      掌握數據結構的基本概念、線性表的基本操作以及查找和排序方法的設計。內容:

      鍵盤輸入一組無序數據,添加到線性表中; 排序線性表并輸出排序結果;

      鍵盤輸入一個數,并插入到排好序的線性表中(要求插入后的表仍為有序表),輸出結果;

      鍵盤輸入一個數,并從線性表中刪除相應的數據,輸出結果。要求:

      程序清單;

      運行過程及運行結果。

      實驗代碼:

      /*

      */

      #include “stdafx.h” #include “iostream” #include

      // 程序實現有各種方法,這里給出一個實例。

      // 定義一個線性表

      const int nMaxSize = 15;// 最大值 int nLen = 0;

      // 定義操作 void LSort();void LOut();void LInsert(int n);void LDelete(int n);

      int main(){

      // 輸入數據并放入線性表中

      printf(“Please input datan”);// std::cout << “Please input datan”;int nIn = 0;

      // 表中元素個數

      int nLinearList[nMaxSize];班級:自動化 0901 班 姓名:郝萬福 學號:20092395

      編譯環(huán)境: Visual Studio 2011 Windows 7 x86-64 旗艦版

      } for(int i = 0;i <= 9;i++){

      }

      LSort();// 排序線性表 LOut();// 輸出結果 scanf(“%d”,&nIn);nLen++;

      //

      std::cin >> nIn;

      nLinearList[i] = nIn;printf(“Please input a data to insert n”);scanf(“%d”,&nIn);LInsert(nIn);LOut();printf(“Please input a data to delete n”);scanf(“%d”,&nIn);LDelete(nIn);LOut();char chTmp;printf(“Please input a char to finish this program.”);chTmp = getch();return 0;// 輸入一個數字,并從線性表中刪除 // 輸入一個數字,并插入到線性表中

      void LSort(){

      }

      void LOut(){

      // 冒泡排序,由大到小

      for(int j=0;j<=10;j++){

      } for(int i=0;i<11-j;i++)

      if(nLinearList[i]

      int temp=nLinearList[i];nLinearList[i]=nLinearList[i+1];nLinearList[i+1]=temp;} printf(“n”);for(int i = 0;i < nLen;i++){

      } } printf(“%d, ”, nLinearList[i]);printf(“n”);void LInsert(int n){ nLen++;nLinearList[nLen] = n;for(int k=0;k<=nLen;k++){for(int l=0;l

      實驗結果:

      實驗2:棧與隊列的應用

      目的:

      掌握棧與隊列的基本概念、基本操作及設計與應用。內容:

      鍵盤輸入算數表達式,并放入隊列當中; 應用棧的概念設計表達式求值算法; 輸出表達式求值結果; 要求:

      程序清單;

      運行過程及運行結果。

      要求:

      實現實驗內容的SQL語句,以及輸出結果

      為檢驗實驗內容的有效性而執(zhí)行的SQL語句,例如向數據表中插入數據; 檢驗運行結果(例如插入、刪除)的SQL語句,以及輸出的結果。

      實驗代碼:

      /*

      */

      #include “stdafx.h” #include #include #include #include using namespace std;

      const int MAX_LEN = 10;

      // 定義一個隊列的結構

      struct QUEUE {

      int nMaxSize;int nCount;int nFront;// 最大值 // 個數 // 頭

      // 字符串的長度

      const int MAX_SIZE = 30;// ?;蜿牭淖畲笤貍€數 班級:自動化 0901 班 姓名:郝萬福 學號:20092395

      編譯環(huán)境: Visual Studio 2011 Windows 7 x86-64 旗艦版

      int nRear;// 尾

      char szQueue[MAX_SIZE][MAX_LEN];} QQ;//定義一個棧的結構

      struct STACK {

      // 隊列的操作

      void InitQueue(QUEUE *q,int nMaxSize){

      } void InQueue(QUEUE *q, char *pItem){

      } void OutQueue(QUEUE *q, char *pItem){

      if(q->nCount == 0){

      } q->nCount--;int i;printf(“隊列已空n”);getch();return 0;if(q->nMaxSize == q->nCount){

      } q->nCount++;int i;for(i=0;i<10;i++){ } q->nFront ++;return;q->szQueue[q->nFront][i]= pItem[i];printf(“隊列已滿n”);getch();return 0;q->nMaxSize=nMaxSize;q->nCount=0;q->nFront=0;q->nRear=0;int nMaxSize;int nTop;// 最大值 // 棧頂

      char szStack[MAX_SIZE][MAX_LEN];} ST;

      }

      for(i=0;i<10;i++){ } q->nRear ++;return;pItem[i] = q->szQueue[q->nRear][i];//棧的操作

      void InitStack(STACK *s,int nMaxSize){

      } void PushStack(STACK *s, char *pItem){

      } void PopStack(STACK *s, char *pItem){ if(s->nTop == 0){

      } printf(“堆棧已空n”);getch();return 0;if(s->nTop == s->nMaxSize-1){

      } for(int i=0;i<10;i++){ } s->nTop++;s->szStack[s->nTop][i]= pItem[i];printf(“堆棧已滿n”);getch();return 0;s->nMaxSize=nMaxSize;s->nTop=0;// 棧頂

      // 最大值

      s->nTop--;for(int i=0;i<10;i++){ } void GetTopStack(STACK *s, char *pItem){ pItem[i] = s->szStack[s->nTop][i];}

      } for(int i=0;i<10;i++)pItem[i] = s->szStack[s->nTop-1][i];{ } int Priority(char *op);式的值

      int main(){ int i=0;

      char c,temp[10];

      // 聲明一個隊列 QUEUE qq;

      // 聲明OS棧和NS棧 STACK ns,os;

      // 獲得操作符的優(yōu)先級

      // 計算表達void Compute(char *num1, char *num2, char *op, char *chResult);

      InitQueue(&qq,MAX_SIZE);InitStack(&ns,MAX_SIZE);char x[MAX_LEN];char op[MAX_LEN];

      // 定義掃描的表達式

      // 棧頂運算符 // 運算結果 InitStack(&os,MAX_SIZE);char num1[MAX_LEN], num2[MAX_LEN];// 兩個操作數 char chResult[MAX_LEN];printf(“Input expression please:n”);while((c=getchar())!='n'){

      InQueue(&qq,temp);temp[0]=c;InQueue(&qq,temp);i=0;

      if(isdigit(c)){ } else {

      for(;i<10;i++){ } temp[i]='