線性表的鏈式存儲結構完整版 數據結構版_第1頁
線性表的鏈式存儲結構完整版 數據結構版_第2頁
線性表的鏈式存儲結構完整版 數據結構版_第3頁
線性表的鏈式存儲結構完整版 數據結構版_第4頁
線性表的鏈式存儲結構完整版 數據結構版_第5頁
免費預覽已結束,剩余3頁可下載查看

下載本文檔

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

文檔簡介

1、#include "stdio.h"/standard input output 的縮寫即標準輸入輸出,它封裝了標準輸入輸出等一些常用函數#include"stdlib.h"/里面包含有一些通用的工具函數,此程序主要用到了它里面包含的system("cls"),system("cls") 和 exit() 函數#include "string.h" / 里面包含有一些常用的字符串函數 ,此程序主要用到了它里面包含的 strcmp() 和 strcpy() 函數typedef struct LNo

2、deint ID;/ 序號為整型char name20;/ 姓名為字符型數組char age10;/ 年齡為字符型數組struct LNode *next; /struct LNode 的直接后繼指針LNode, *LinkList;/LNode 為結構體名 ,*LinkList 為指針型結構體名int AgeJudge(char ch110)/ 輸入的ch1必須為大于0的整數char ch210;int a;/定義 ch2字符型數組存放一個整型數據/用于保存ch1轉換為整型的數據while(1)/無限循環使用戶可以無限輸入直到輸入正確scanf("%s",ch1);/輸入

3、ch1a=atoi(ch1);/將 ch1轉換為整型itoa(a,ch2,10);/ 將 ch1轉換為整型后的數據再存放到ch2當中if(strcmp(ch1,ch2)=0&&a>0)break;/ 當輸入的數據為大于0的整數時跳出死循環elseprintf("請輸入一個人大于0的整數 : "); / 輸入數據有誤return a;/ 返回輸入的大于0的整數/AgeJudgevoid CreateList_L(LinkList &L, int n)/順位序輸入n個元素的值int i;LinkList p,s,p1;,建立帶表頭節點的單鏈線性表/

4、用作循環變量L/p為第一個節點的結構體指針,s為第一個以后節點的結構體指針,p1為臨時結構體指針L=(LinkList)malloc(sizeof(LNode);/ 生成頭結點if(!L)printf("空間申請失敗L->next=NULL;!");/生成頭結點失敗/ 先建立一個帶頭結點的空的單鏈表for(i=0;i<n;i+)printf("n");if(i=0)/ 當輸入第一組數據時p=(LinkList)malloc(sizeof(LNode); /if(!p)printf("空間申請失敗!");生成新結點/ 生成新

5、結點失敗printf(" 請輸入第 %d個人的姓名 : ",i+1);scanf("%s",p->name);/ 輸入姓名printf("請輸入第%d個人的年齡: ",i+1);AgeJudge(p->age);L->next=p;p->next=NULL;/鏈到表頭后面else/當輸入非第一組數據時s=(LinkList)malloc(sizeof(LNode); /生成新結點if(!s)printf("空間申請失敗!");/生成新結點失敗printf(" 請輸入第 %d個人的姓

6、名 : ",i+1);while(1)int flag=0;scanf("%s",s->name);/ 輸入姓名p1=L->next;while(p1)if(strcmp(s->name,p1->name)=0)/ 線性表中已經存在目前輸入的姓名flag=1;break;p1=p1->next;if(flag=1)printf(" 此姓名已存在,請重新輸入: ");/ 名字已存在,返回重新輸入if(flag=0)break;/名字不存在,跳出死循環printf(" 請輸入第 %d個人的年齡 : "

7、;,i+1);/ 輸入大于0的整數的年齡AgeJudge(s->age);p->next=s;s->next=NULL;/將輸入的數據鏈到目前已存在的數據后面,并使下一指針為空,為下一次輸入做好準備p=p->next;/ 指針后移printf("n 信息錄入完成!nn");/鏈表創建完成/CreateList_Lvoid PrintElem_L(LinkList L)/ 輸出單鏈表中的數據LinkList p;int i=0;/計數器 ,計算鏈表中結構體數組數據的個數if(L->next=NULL)printf("tIt's

8、Empty!nn"); /空鏈表else/不為空鏈表p=L->next;printf("t%-7s%-10s%-4sn","while(p)/從頭結點的下一個節點開始序號 "," 姓名 "," 年齡 ");/ 當指針不為空i+;p->ID=i;/將計數器的值賦值給結構體中的序號printf("t %-6d%-10s %-3sn",p->ID,p->name,p->age); / p=p->next;輸出數值/ 指針后移printf("n&q

9、uot;);/PrintElem_Lvoid GetElem_L(LinkList L,int i)/L 為頭結點的單鏈線性表的頭指針/當第 i個元素存在時,取出它的值LinkList p;p=L->next;int j=1;while(p&&j<i)/ 初始化 ,p指向第一個節點,j為計數器/ 順指針向后查找,直到 p指向第i 個元素或 p為空p=p->next;+j;if(!p|j>i)printf("n沒有找到你輸入的序號信息!nn");/ 第i 個元素不存在elseprintf("nt 你要查找的信息如下:nn&qu

10、ot;);printf("t%-7s%-10s%-4sn","序號 "," 姓名 "," 年齡 ");printf("t %-6d%-10s %-3snn",i,p->name,p->age);/ 輸出找到的值/GetElem_Lvoid ListInsert_L(LinkList &L,int i)/在帶頭結點的單鏈線性表L 中第 i 個位置之前插入元素eLinkList s,p,p1;p=L;/ 從頭節點開始int j=0;/ 計數器while(p&&j&

11、lt;i-1)p=p->next;+j;/尋找第 i-1個結點if(!p|j>i-1)/i 小于 1或者大于表長加 1printf("n 插入位置錯誤 !nn");else/已經找到對應的結點s=(LinkList)malloc(sizeof(LNode);/生成新結點if(!s)printf(" 空間申請失敗 !");/生成新結點失敗printf(" 請輸入新的姓名 : ");while(1)int flag=0;scanf("%s",s->name);/ 輸入姓名p1=L->next;w

12、hile(p1)if(strcmp(s->name,p1->name)=0)/輸入的姓名鏈表中已經存在flag=1;break;p1=p1->next;if(flag=1)printf(" 此姓名已存在 ,請重新輸入 : ");/ 姓名已存在重新輸入if(flag=0)break;/ 輸入姓名不存在跳出死循環printf(" 請輸入年齡 : ");AgeJudge(s->age);/輸入一個大于 0的整型的年齡s->next=p->next;/插入 L中p->next=s;printf("n 插入信息成

13、功 !");printf("nn插入數據之后的數據如下: nn");PrintElem_L(L); / 輸出插入后線性表中的數據/ListInsert_Lvoid ListDelete_L(LinkList &L, int i)/在帶頭結點的單鏈線性表L 中 ,刪除第i 個元素 ,并有 e返回其值LinkList q,p;p=L;/從頭結點開始int j=0;/計數器char name20,age10;/用于存放要刪除的數值while(p->next&&j<i-1)/尋找第 i個結點 ,并令 p指向其前趨p=p->next

14、;+j;if(!(p->next)|j>i-1)/刪除位置不合理printf("nn 刪除位置錯誤 !nn");elseq=p->next;p->next=q->next;/ 刪除并釋放結點strcpy(name,q->name);strcpy(age,q->age); / 保存要刪除的數據 free(q);printf("n 你所刪除的數據信息如下: nn");printf("t%-7s%-10s%-4sn","序號 "," 姓名 "," 年

15、齡 ");printf("t %-6d%-10s %-3snn",i,name,age);/ 輸出要刪除的數據 printf("nn 刪除數據之后的數據如下 : nn");PrintElem_L(L);/ 輸出刪除后線性表中的數據/ListDelete_Lint menu()int choose;char ch10;while(1)system("cls");/ 界面菜單函數printf("nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n");printf("

16、ttt(1)建立新的線性表 nn");printf("ttt(2)查找第 i個位置數據信息 nn");printf("ttt(3)第 i 個位置之前插入數據nn");printf("ttt(4) 刪除第 i個元素 nn");printf("ttt(5)輸出當前線性表中的數據nn");printf("ttt(0)退出程序 n");printf("tt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*n");printf("tt 請輸入

17、你的選擇: ");scanf("%s",ch);/ 輸入選擇if(strcmp(ch,"0")=0|strcmp(ch,"1")=0|strcmp(ch,"2")=0|strcmp(ch,"3")=0|strcmp(ch,"4")=0|strcmp(ch,"5")=0)/當輸入的是0,1,2,3,4或 5時choose=atoi(ch);/ 將字符串型0,1,2,3,4,5轉換為整型break;/ 跳出菜單選擇elseprintf("n

18、t 選擇錯誤 ,請重新選擇system("pause");return choose;!nn");/ 菜單選擇錯誤,重新選擇/程序暫停 ,使用戶能看見上面的提示語/返回用戶的菜單選擇void main()char ch10;LinkList L=NULL;/定義 L為結構體的頭指針,初始值為空system("color a0");/ 改變運行窗口背景顏色和字體顏色 ,第一個為背景顏色 ,第二個為文字顏色背景設置為綠色 ,字體顏色設置為黑色while(1)switch(menu()case 1: system("cls");/

19、運行到此處清屏 ,屏幕只顯示此處以下運行界面,此處以上運行界面清空printf("nn請輸入要輸入數據的個數: ");CreateList_L(L,AgeJudge(ch); / 輸入的個數必須是一個大于0的整數 ,創建線性表printf("n你輸入的數據如下 : nn");PrintElem_L(L);/輸出創建的線性表信息system("pause");break;/ 讓用戶看到輸出結果后跳出switch 選擇case 2: system("cls");if(L=NULL|L->next=NULL)pri

20、ntf("nnIt'sEmpty!nn");/目前不存在線性表else /目前存在線性表printf("nnn 請輸入查找數據的位置序號: ");GetElem_L(L,AgeJudge(ch);/輸入的序號必須是大于0的整數 ,執行查找功能system("pause");break;/讓用戶看到查找結果后跳出switch 選擇case 3: system("cls");if(L=NULL)printf("nnIt's Empty!nn");/目前不存在線性表入功能線性表else/目前存在線性表printf("nn 插入數據之前的數據如下 : nn"); PrintElem_L(L); / 輸出插入數據之前線性表中的數據printf("nn請問你要在第幾個位置序號前插入數據: ");ListInsert_L(L,AgeJudge(ch); /輸入的序號必須是大于0的整數 ,執行插system("pause");break;/讓用戶看到插入結果后跳出switch 選擇cas

溫馨提示

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

評論

0/150

提交評論