能擴容的順序表作為線性表的存儲結構_第1頁
能擴容的順序表作為線性表的存儲結構_第2頁
能擴容的順序表作為線性表的存儲結構_第3頁
能擴容的順序表作為線性表的存儲結構_第4頁
能擴容的順序表作為線性表的存儲結構_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#include hstdio.hm#include "stdlib.h*'#include ”string.h11#define max 4/動態數組的初始長度#define listincrement 3/動態數組長度不夠時,每次增加的長度/學生結構體typedef structchar no10;char name20;char gender;float score;stu;/動態順序表結構體typedef structstu *s;存放學生的動態數組的起始地址,數組大小可以擴充,因此稱其為“動態”int listsize; /當前順序表中數組單元的個數int leng

2、th;/當前表中元素的個數(肯定小于數組單元的個數) seqlist;/功能菜單void menu()printf("nt*動態順序表(順序表空間可以擴充)*nh);printf(ht*1插入一個學生*nh);printf("t*2刪除一個學生*nh);printf(ht*3修改學生信息*nh);printf(ht*4輸出所有學生信息*nh);printfc't*0保存數據并退出程序*nh);* * * *、/*檢測當前目錄下是否存在文件stu.dat,如果存在,則從其中讀収數據構造線性表; 否則,新建該數據文件。*/void init(seqlist &s

3、l)/將順序表定義為主函數中的局部變量list,此處通過參數sl對其進行引用file *fp; char flag='r'stu stmp;int i;/*給動態數組開辟初始的內存空間,并初始化為空表;*/sl.s = (stu *)malloc(sizeof(stu)*max); / 基本等價于 sl.s = (stu *)calloc(max, sizeof(stu);/設置順序表中動態數組的初始長度為maxsl.iistsize = max;/設置順序表的初始長度為0sl.iength=o;/打開文件if(fp=fopen("stu.dat"/ &qu

4、ot;rb")=null)flag='w'if(fp=fopen("stu.dat"/ hwb")=null)printfc數據文件創建不成功,程序異常退出! “);exit(-l);/開始讀文件if(flag=,r,)i=0;fread(&stmp, sizeof(stu), 1, fp); / 先嘗試著讀第一個學生while(!feof(fp)/檢測文件尚未結束,則說明讀到了一個學生訐(i<sl.iistsize)slsi = stmp;/將讀到的學生stmp復制到順序表中s數組的i號單元fread(&stmp,

5、 sizeof(stu), 1, fp); /從文件讀下一個學生的同時,執行i+ i+; else/必須先擴充順序表川動態數組s的空間,然后再繼續;/給順序表中的動態數組增加listincrement個單元的空間sl.s = (stu *)realloc(sls, (sl.iistsize+ustincrement)*sizeof(stu);sl.iistsize = sl.iistsize+listincrement;sl.iength = i;/讀到的學生個數即為順序表長度/關閉文件fclose(fp);/*插入一個學生到線性表屮*/void insert(seqlist &sl)

6、int ijocation,len;seqlist si;void showaii(seqlist sl);void save(seqlist sl);showaii(sl);len=slen gth;printf("n當前順序表中已有d個元素,當前插入位置只能是lz%dn"jenjen); printf("n請輸入插入位置:”);scan f("%d",&location);while(locationv=011 location>=len)printff'xn插入位置錯誤,請再次輸入插入位置:”); scanf(&qu

7、ot;%dh,&location);while(sl.iength>=sl.listsize)sl.s=(stu*)malloc(sl.iistsize+ustincrement)*sizeof(stu);sl.listsize=sl.iistsize+ustincrement;sl.length=slen gth;for(i=0;i<sl.iistsize;i+)sl.si=sl.si; free(sl.s);sl=sl;for(i=le n;i>=locati on;i)sl.si=sl.si-l;printf("n請輸入插入學生的學號:”); scan

8、f("%s",sl.slocation.no);printf("n請輸入插入學生的姓名:”); scanf("%s"zsl.);printf("n請輸入插入學生的性別:”);scanf("%s",&sl.slocation.gender); printf("n請輸入插入學生的分數:”); scanf(”f",&sl.slocation.score);sl.iength+;printf(hn 插入成功!“);showaii(sl); save(sl);/

9、*從線性表中刪除一個學生*/void del(seqlist &sl)int ijen;char a;char no10;void showaii(seqlist sl);void save(seqlist sl); showaii(sl);len 二 slien gth;printf("n請輸入刪除學生的學號:”); scanf(”s“,no);for(i=0;i<len;i+)訐(strcmp(sl.si.no,no)=0)break;while(i>=l en)printf(hn當前表中未找到修改學生的學號:n請重新輸入(按0退出修改):"); s

10、canf(吆 s”,no);if (strcmp(no,“0“)=0)return;for(i=0;i<le n;i+)if(strcmp(sl.si.no,no)=0)break;printfcan您要刪除的學生信息如下:“);printf(nn學號t姓名t性別t分數“); printf("n%st%st%ct%d"/sl.si.no/sl.zsl.si.gender,sl.si.score);printf("n您確定要刪除該學生嗎(按y或y刪除,按任意鍵取消)? “); scanf(”s”,&a);if(a='y'|

11、 |a=y)while(i<len-l)sl.si=sl.si+l;i+;(sl.iength)-;printf("n 刪除成功!”);showaii(sl);save(sl);/*查找并修改一個學生的信息*/void modify(seqlist &sl)int i,m,n;char no10;void showaii(seqlist sl);void save(seqlist sl); showaii(sl);m=slen gth;printf(nn請輸入修改學生的學號:”);scan ff's'no);for(i=0;i<m;i+)if (s

12、trcmp(sl.si.no,no)=0)break;while(i>=m)printff'xn當前表中未找到修改學生的學號:n請重新輸入(按0退出修改):”); scanf(”s”,no);if(strcmp(no,”0“)=0)return;for(i=0;i<m;i+)if (strcmp(sl.si.no,no)=0)break;printff'xn當前學生信息如下:”);printf("nl-學號:%sn2-姓名:%s",sl.si.no,sl.);printf("n3-性別:%cn4-分數:%f",s

13、l.si.genderzsl.si.score);printf("n請選擇修改信息項的編號(輸入0完成修改):”);scanf("%dn,&n);doswitch(n)case 0:return;case l:printf("請輸入修改后的學號:”);scanf("%s”,sl.si.no);break;case 2:printf("請輸入修改后的姓名:");scanf("%s",sl.);break;case 3:printf("請輸入修改后的性別:");scanf(&q

14、uot;%s",&slsi.gender);break;case 4:printf("請輸入修改后的分數:”);scanf("%f",&sl.si.score);break;printf("n當前學生信息如下:");printf("nl-學號:%sn2-姓名:%s",sl.si.no,sl.);printf("n3-性別:%cn4-分數:%f",slsi.genderzsl.si.score);printf(un請選擇修改信息項的編號(輸入0完成修改):”); sc

15、anf("%d"z&n);while(n);printf(un 修改成功!”);showaii(sl);save(sl);/*顯示所有學生的信息*/void showaii(seqlist sl)int i;if(sl.iength>o)printf("順序表的單元個數為d ,當前表屮的元素個數為d ; n"z sl.iistsize, sl.iength);printf(”順序表中所有學生的信息如下:n"); printf("%5s%lls%21s%7s%9sn,/ “序號學號,姓名”性別,成績“);for(i=0;

16、i<=sl.iength-l; i+)printf("%5d%lls%21s%7c%9.1fn"z i+1, sl.si.no, sl., sl.si.gender,sl.si.score);/*保存所有學生的信息到文件*/void save(seqlist sl)file *fp;int i;/打開文件if(fp=fopen("stu.dat,/ ,wb")=null)printfc1數據文件打開失敗,保存不成功,程序異常退出! nh);exit(-l);/開始寫文件for(i=0; i<=sljength-l; i+)fwrite(&(slsi)z sizeof(stu), 1, fp);/關閉文件fclose(fp);printf(”順序表中的數據已經成功寫入文件!n”);void main()int choice=-l;seqlist list;/ 定義順序表 listinit(list);/在init()函數中為其成員s開辟空間,并設置數組元素個數為0while(l)men u();ff

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論