數據結構代碼_第1頁
數據結構代碼_第2頁
數據結構代碼_第3頁
數據結構代碼_第4頁
數據結構代碼_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數據結構代碼.數據結構代碼全文共7頁,當前為第1頁。第二章線性表數據結構代碼全文共7頁,當前為第1頁。1.線性表/*******實現了線性表的定義,創(chuàng)建空的線性表,線性表元素的輸入,輸出操作,對線性表進行增刪的操作以與對兩個順序線性表按照順序進行合并*******/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineLIST_INIT_SIZE100//定義線性表的長度#defineINCREMENT2//定義存儲空間的分配增量typedefstruct{int*elem;//線性表存儲空間的首地址intlength;//線性表的長度intlistsize;//現性表的大小}Sqlist;voidinit(Sqlist&L){//初始化一個線性表L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)exit(0);L.length=0;L.listsize= LIST_INIT_SIZE;return;}voidlistinsert(Sqlist&L,inte,inti){//在第i個元素之前插入數據eint*newbase=NULL;//創(chuàng)建新的起始地址int*q;int*p; if(i<1||i>L.length+1)//插入元素失敗exit(0); if(L.length>=L.listsize)//存儲空間不足,重新分配空間 {newbase=(int*)realloc(L.elem,(LIST_INIT_SIZE+INCREMENT)*sizeof(int));if(!newbase)exit(0);L.elem=newbase;L.listsize+=INCREMENT; }數據結構代碼全文共7頁,當前為第2頁。 q=&L.elem[i-1];//找到第i個元素數據結構代碼全文共7頁,當前為第2頁。 for(p=&L.elem[L.length-1];p>=q;p--)*(p+1)=*p;//把第i個元素與之后的每一個元素向后移動一位 *q=e;//插入目標元素L.length++;return;}voidlistdelete(Sqlist&L,inti,int&e){//刪除第i個元素,返回被刪除的元素的值int*p;int*q;if(i<1||i>L.length)exit(0); e=L.elem[i-1]; q=&L.elem[L.length-1]; for(p=&L.elem[i];p<q;p++)*p=*(p+1);//被刪除元素后面的每一個元素的位置向前移動一位L.length--;return;}voidlistinput(Sqlist&L,inti){//輸入i個元素intj=0;if(i>L.listsize)exit(0);for(j=0;j<i;j++){scanf("%d",&L.elem[j]);L.length++; }}voidlistput(SqlistL){//輸出線性表中全部的元素inti=0;if(L.length<=0)exit(0);for(i=0;i<L.length;i++)printf("%d",L.elem[i]);printf("\n");return;}voidmergin(SqlistLa,SqlistLb,Sqlist&Lc){int*pa=La.elem;數據結構代碼全文共7頁,當前為第3頁。int*pb=Lb.elem;數據結構代碼全文共7頁,當前為第3頁。int*pa_last=&La.elem[La.length-1];int*pb_last=&Lb.elem[Lb.length-1];int*pc;inti=0;init(Lc);pc=Lc.elem; while(pa<=pa_last&&pb<=pb_last){//這里以與下面的判斷條件一定要指針指出去才能算把數據放大Lc中去了if(*pa<=*pb){Lc.elem[i]=*pa;pa++; }else{Lc.elem[i]=*pb;pb++; }i++;Lc.length++; }while(pa<=pa_last){Lc.elem[i]=*pa;pa++;i++;Lc.length++;}while(pb<=pb_last){Lc.elem[i]=*pb;pb++;i++;Lc.length++;}}/*intmain(){//測試線性表的增刪操作inte;SqlistL;init(L);//創(chuàng)建一個新的空的線性表printf("請輸入5個數\n");listinput(L,5);//輸入5個整數printf("輸入的5個整數為:");listput(L);printf("在第2個數之前插入整數99");listinsert(L,99,2);printf("\n輸出線性表中的數據");listput(L);printf("刪除線性表中第4位元素");listdelete(L,4,e);printf("刪除的數為:%d\n",e);printf("輸出線性表中的數據");listput(L);return0;數據結構代碼全文共7頁,當前為第4頁。}數據結構代碼全文共7頁,當前為第4頁。*/intmain(){//測試兩個順序線性表的合并操作printf("創(chuàng)建兩個線性表");SqlistLa,Lb,Lc;init(La);init(Lb);printf("輸入線性表1中的數據,5個整數\n");listinput(La,5);printf("輸入線性表2中的數據,5個整數\n");listinput(Lb,5);mergin(La,Lb,Lc);printf("\n輸出合并和線性表3中的數據\n");listput(Lc);return0;}線性鏈表#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedefstructLNode{//定義一種數據類型,它是由一個整數數據和一個指向這中數據的指針組成的intdata;//存放整形數據structLNode*next;//指向下一個數據的指針}*linklist;//創(chuàng)建一個有n個數據的數據鏈表〔帶頭結點,且是向前插入,后面數據一個個往前輸〕voidcreatelinklist1(linklist&L,intn){inti;linklistp; L=(linklist)malloc(sizeof(LNode));//創(chuàng)建一個頭結點〔線性表的空間不是連在一起的,不能一起申請完了,只能用一個申請一個〕 L->next=NULL;for(i=n;i>0;i--){ p=(linklist)malloc(sizeof(LNode));scanf("%d",&p->data);p->next=L->next;L->next=p;數據結構代碼全文共7頁,當前為第5頁。 }數據結構代碼全文共7頁,當前為第5頁。}//創(chuàng)建一個有n個數據的數據鏈表〔帶頭結點,且是向后插入,前面數據一個個往后輸〕voidcreatelinklist2(linklist&L,intn){inti;linklistp,r;//把p作為要新創(chuàng)建的節(jié)點,r永遠是p節(jié)點前面的節(jié)點,這樣鏈就不會斷 L=(linklist)malloc(sizeof(LNode)); L->next=NULL; r=L;for(i=0;i<n;i++) { p=(linklist)malloc(sizeof(LNode));scanf("%d",&p->data);r->next=p;p->next=NULL; r=p; }}//輸出線性鏈表中的數據voidputoutlinklist(linklist&L){linklistp;if(!L->next)exit(0); p=L;//p指向頭結點 while(p->next)//p指下一個數據向的數據后面還有數據 { p=p->next;//p指向printf("%d",p->data); }printf("\n");}//獲取鏈表中第n位的元素voidgetelem(linklist&L,intn,int&e){linklistp;inti=0; p=L; while(p&&i<n)//循環(huán)n次指向第n位元素 { p=p->next;//不斷獲取下一位元素數據結構代碼全文共7頁,當前為第6頁。i++;數據結構代碼全文共7頁,當前為第6頁。 }if(!p||i>n)exit(0); e=p->data;}//在鏈表第n位之前插入一個元素voidinsertlinklist(linklist&L,intn,inte){linklistp,q;inti=0; p=L; while(p&&i<n-1)//找到第n-1位元素的位置 { p=p->next;i++; }if(!p||i>n-1)exit(0); q=(linklist)malloc(sizeof(LNode)); q->data=e; q->next=p->next;p->next=q;}voiddeletelinklist(linklist&L,intn,int&e)//刪除鏈表中第n個數據{linklistp;inti=0; p=L; while(p&&i<n-1)//找到第n-1個元素 { p=p->next;i++; }if(!q||i>n)exit(0); e=p->next->data;p->next=p->next->next;}intmain(){linklistl;inte=0;printf("創(chuàng)建一個有5個元素的鏈表\n");數據結構代碼全文共7頁,當前為第7頁。//createlinklist1(l,5);數據結構代碼全文共7頁,當前為第7頁。createlinklist2(l,5);printf("輸入鏈表中的內容:\n

溫馨提示

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

評論

0/150

提交評論