牙簽c語言
『壹』 c語言用鏈表實現逆序輸出
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//定義鏈表節點
typedefstructLNode
{intdata;
structLNode*next;
}LNode,*Linklist;
//創建鏈表
Linklistcreate()
{inti,n;//i用於下面循環,n用來存放有效節點的字數
Linklistp,L;
printf("PleaseinputN=");
scanf("%d",&n);
L=(Linklist)malloc(sizeof(LNode));//分配一個不存放有效數據的頭結點
L->next=NULL;
for(i=0;i<n;i++)
{p=(Linklist)malloc(sizeof(LNode));//生成新節點
scanf("%d",&p->data);//輸入元素值
p->next=L->next;
L->next=p;
}
returnL;//返回頭節點;
}
//鏈表反轉輸出
LinklistReverseList(LinklistL,intst)//st為1時輸出結點數據
{if(L->next!=NULL)
ReverseList(L->next,1);
if(st)printf("%d",L->data);
returnL;
}
voidput(LinklistL)
{Linklistp;
p=L->next;
while(p!=NULL)
{printf("%d",p->data);
p=p->next;
}
printf("
");
}
intmain()
{LinklistL;
L=create();
printf("A:");put(L);
printf("B:");
ReverseList(L,0);//附加結點未保存數據,故第二參數為0
return0;
}
『貳』 求圖書館管理系統程序(c語言)
C程序項目-圖書管理系統收藏
#include"stdio.h"#include"stdlib.h"#include"windows.h"#include"string.h"
/*圖書相關信息*/struct bookinf //定義圖書相關信息結構體{ int num; char bname[20]; char wname[10]; char clanum[14]; char pubcom[10]; char pubtime[10]; float price;};
structmanage //定義管理員相關信息結構體{ char manage_name[10]; char password[10];};
/*首頁*/void index() //首頁列印設置{ char input; printf("\n\n\t\t\t*****************************\n"); printf("\t\t\t Paladin圖書信息查詢管理系統\n"); printf("\t\t\t*****************************\n\n\n"); printf("------------------------------------------------------------------------------\n"); printf("\n\t\t\t書山有路勤為徑\n"); printf("\t\t\t\t 學海無涯苦作舟\n"); printf("\n\n\t 總策劃:吳昊\n\n"); printf("\t 程式設計:肖書明樊啟恆蘆丹覃枝霞況軒 (排名不分先後)\n\n"); printf("\t 聯系方式:QQ:6828000 or Mail To:[email protected]\n"); printf("\t________________________________________________________________\n"); printf("\t\tCopyrights @ Accp SIT25 Leo Workgroup 2004.8\n"); printf("\t\t\t All RightsReserved\n"); printf("\t\t\t\tVer 1.03\n"); printf("\t<按任意鍵進入>\n\t"); input=getchar(); //讓用戶輸入一個字元後再進行下一步(以後在本程序中用得很多) system("cls"); //清屏}
/*登陸方式*/ void login(){ void tra_view(); //聲明包含的函數 void adm_view(); void byebye(); void about(); void coloregg();
int input; char input_1; do //循環顯示登陸選項(當輸入的數不為選項數的時候重復循環) { system("cls"); printf("\n\n\n\t1.以遊客身份進入\n"); printf("\t2.以管理員身份進入\n"); printf("\t3.關於本系統\n"); printf("\t4.退出本系統\n\n\n"); printf("\t請選擇服務類別:"); scanf("%d",&input); if(input!=1&&input!=2&&input!=3&&input!=4&&input!=99) //輸入數不等於選項的時候列印畫面 { printf("\n\t輸入出錯!請重新選擇~\n"); printf("\n\t按任意鍵返回選擇頁面~\n\t"); input_1=getchar(); input_1=getchar(); system("cls"); } if (input==4) { byebye(); //如果輸入數為4,則執行byebye()函數 } } while (input!=1&&input!=2&&input!=3&&input!=4&&input!=99);
switch(input) //分支選擇 { case 1:tra_view(); break; //選1執行遊客進入方式 case 2:adm_view(); break; //選2執行管理員進入方式 case 3:about(); break; //選3執行關於界面函數 case 99:coloregg(); break; //選99執行彩蛋函數 }}/*關於界面*/void about(){ void login(); char input; //關於界面的列印設置 system("cls"); printf("\n\n\t\t\t\t歡迎使用幫助\n"); printf("\t_______________________________________________________________"); printf("\n\t1.本系統採用模塊化設計\n"); printf("\t每一項功能由單獨的函數塊控制,一個功能塊有錯不會影響全局\n\n"); printf("\t2.人性化設計\n"); printf("\t相關提示信息豐富,以人為本\n\n"); printf("\t3.功能強大\n\n"); printf("\t 實現了:\n"); printf("\t\t1 圖書信息錄入\n"); printf("\t\t2 圖書信息查詢\n"); printf("\t\t3 圖書信息修改\n"); printf("\t\t4 圖書信息刪除\n"); printf("\t\t5 圖書信息排序\n"); printf("\t\t6 提供遊客和管理員兩種登陸方式\n"); printf("\t\t 加以修改可以滿足網路的需要\n\n"); printf("\t\t7 管理員的帳號密碼可以自我設定,修改\n"); printf("\t\t8 彩蛋~~(進入方法嘛,嘿嘿)\n"); printf("\n\t按任意鍵返回登陸界面!"); input=getchar(); input=getchar(); login(); //任意鍵返回登陸界面}
/*彩蛋*/void coloregg() //列印界面{ char inp; void login(); system("cls"); printf("\n\n\n\t\t一直以為\n\t\t"); inp=getchar(); inp=getchar(); printf("\t\t隱了身別人就找不到我\n\t\t"); inp=getchar(); printf("\t\t可是我錯了\n\t\t"); inp=getchar(); printf("\t\t象我這么出眾的男人\n\t\t"); inp=getchar(); printf("\t\t不管到哪都是受人矚目的焦點\n\t\t"); inp=getchar(); printf("\t\t我那憂郁的眼神\n\t\t"); inp=getchar(); printf("\t\t唏噓的鬍渣子\n\t\t"); inp=getchar(); printf("\t\t還有那神乎其技的AK掃射\n\t\t"); inp=getchar(); printf("\t\t以及那杯82年的馬爹利和發哥給的牙簽\n\t\t"); inp=getchar(); printf("\t\t無不深深出賣了我~~~\n\t\t"); inp=getchar(); printf("\t\t\t\t--------狂人\n\t\t"); inp=getchar();
login();}
/*離開界面*/void byebye() //離開界面{ char input; system("cls"); printf("\n\n\n\n\n\t\t\t路漫漫其修遠兮"); printf("\n\n\n\n\t\t\t\t\t吾將上下而求索"); printf("\n\n\t________________________________________________________________"); printf("\n\n\n\t\t*感謝您的使用*\n\n\t\t"); printf("按任意鍵退出本系統\n\t\t"); input=getchar(); input=getchar(); printf("\n\t\t"); exit(0); //exit()函數跳出整個程序}
/*刪除所有相關信息*/void delall() //管理員選項中的初始化函數{ void login(); void adm_servelist(); int inp; char input; do //如果輸入的不是界面提供的選項值,則重復顯示輸入界面 { system("cls"); printf("\n\n\t----------!!警告!!----------\n"); printf("\n\t一旦選擇了全部初始化將清除全部數據!包括圖書信息和管理員信息!\n"); printf("\n\t初始化完畢後返回登陸界面\n"); printf("\n\n\t你確定要初始化嗎\n"); printf("\n\n\t1.是的~我要初始化\t2.不要~讓我再想想\n"); printf("\n\t請輸入服務選項:"); scanf("%d",&inp); switch (inp) { case 1: //如果輸入為1則刪除book.dat和password.dat文件 remove("book.dat"); remove("password.dat"); printf("\n\n\t初始化完畢!\n\t所有數據全部清空!\n\t按任意鍵返回登陸界面!"); input=getchar(); input=getchar(); login(); //並返回登陸界面 break; case 2: //選2則返回管理員登陸界面 adm_servelist(); break; default: //否則列印如下字樣並重復循環 printf("\n\n\t對不起~沒有這項服務!\n\t按任意鍵重新選擇\n\t"); input=getchar(); input=getchar(); break; } } while (inp!=1&&inp!=2&&inp!=3);}
/*遊客登陸方式*/void tra_view(){ void tra_book_view(); void tra_book_search(); void login();
int inp; char input;
do //同以往的do{}while一樣,用來保證用戶輸入的數能夠被執行 { system("cls"); printf("\n\n\t------------歡迎光臨ACCP圖書館------------"); printf("\n\n\n\t1.圖書信息瀏覽\n"); printf("\t2.查詢指定圖書\n"); printf("\t3.退出\n"); printf("\n\n\t請選擇服務類別:"); scanf("%d",&inp); if (inp!=1&&inp!=2&&inp!=3) { printf("\n\t沒有這項服務~\n"); printf("\t按任意鍵重新選擇"); input=getchar(); input=getchar(); } } while (inp!=1&&inp!=2&&inp!=3);
switch(inp) //分支選擇 { case 1: tra_book_view(); break; //選1則執行遊客瀏覽 case 2: tra_book_search(); break; //選2則執行游查詢 case 3: login(); break; //選3返回登陸界面 }}
/*遊客瀏覽方式*/void tra_book_view(){ void tra_view(); void tra_book_view();
intinp,i=0,n=0; FILE *fp; char input; struct bookinf bookview[100]; if((fp=fopen("book.dat","rb"))==NULL) //判斷圖書信息文件是否存在,不存在則顯示如下字樣 { system("cls"); printf("\n\n\n\t數據尚未初始化~~\n\n\t請在管理菜單中增加圖書信息~~~\n"); printf("\n\t<按任意鍵返回管理菜單>\n\t"); input=getchar(); input=getchar(); tra_view(); //並返回遊客進入畫面 } else //存在的話則循環讀取文件中的信息直到文件指針到達文件尾部 { do { fread(&bookview[i],sizeof(struct bookinf),1,fp); i=i+1; } while (!feof(fp)); //這一段代碼以後也會經常用到 fclose(fp); //關閉文件指針 do { system("cls"); //顯示讀取數據的第一條,條數用變數n控制 printf("\n\t--------共有%d條記錄--------",i-1); printf("\n\n\t編號: %d\n",bookview[n].num); printf("\n\t書名: %s\n",bookview[n].bname); printf("\n\t作者名: %s\n",bookview[n].wname); printf("\n\t分類號: %s\n",bookview[n].clanum); printf("\n\t出版單位: %s\n",bookview[n].pubcom); printf("\n\t出版時間: %s\n",bookview[n].pubtime); printf("\n\t價格: %f\n",bookview[n].price);
printf("\n\n\t1.上一頁\t2.下一頁\t3.回目錄\n"); printf("\n\t請選擇:"); scanf("%d",&inp); switch (inp) { case 1: //如果選擇了上一頁 { if (n==0) //如果n到首頁則輸出以下字樣 { printf("\n\t已到達首頁\n\t按任意鍵重新選擇"); input=getchar(); input=getchar(); } else //否則就讓n自減1跳出選擇重復循環 { n=n-1; } break; } case 2: //如果選擇了下一頁 { if (n==i-2) //如果n到達最尾頁 { printf("\n\t已到達最末頁\n\t按任意鍵重新選擇"); input=getchar(); input=getchar(); } else //否則就讓n自加1跳出選擇重復循環 { n=n+1; } break; } case 3: //選擇3的話回到遊客登陸界面 { tra_view(); break; } default: //沒有這項選擇時的提示 { printf("\n\t沒有這項服務\n\t按任意鍵重新選擇"); input=getchar(); input=getchar(); break; } } } while (inp!=3); }}
/*遊客查詢方式*/void tra_book_search(){ void tra_view(); void tra_id_search(); void tra_wr_search(); void tra_bn_search();
char input; FILE *fp; int inp; if((fp=fopen("book.dat","rb"))==NULL) //判斷圖書信息是否存在 { system("cls"); //不存在則列印的界面 printf("\n\n\n\t數據尚未初始化~~\n\n\t請在管理菜單中增加圖書信息~~~\n"); printf("\n\t<按任意鍵返回管理菜單>\n\t"); input=getchar(); input=getchar(); tra_view(); } else { do //同以前一樣用do{}while來重復顯示 { system("cls"); printf("\n\n\n\t1.按圖書編號查詢\n"); printf("\n\t2.按圖書作者查詢\n"); printf("\n\t3.按圖書名查詢\n"); printf("\n\t4.回到主菜單\n"); printf("\n\n\t請選擇查詢類別:");
『叄』 如何用c語言實現單鏈表的逆置
扣著的是頭節點(頭子)
車是首節點(首子)
馬是次節點(次子)
牙簽細的是指針指向,香頭發黑的是指向,鐵頭細的是指向。
根據步驟寫程序的偽演算法(3步4循環,7張圖片搞定),如下:
第一個循環把馬弄到車前面,
第二個循環把相弄到馬前面
第三個循環把士弄到相前面
........
直到香指向為空後停止循環。
代碼如下:只需要一個首結點pHead,就能把鏈表找到,並倒置。具體代碼如下
p香=pHead->pNext;
p鐵=p香->pNext;
p香->pNext=NULL;
P香=p鐵
while(p香 !=NULL)
{
p鐵=p香->pNext;
p香->pNext=pHead->pNext;
pHead->pNext=p香;
p香=p鐵;
}
對照偽演算法(三步四循環),和上面的代碼是一一對應的:
第一步:香頭指向首子,鐵頭指向次子
第二步:刪掉首子指向次子(鐵頭所指向的那個子)的牙簽
第三步:香頭跟著鐵頭
以下循環條件:(條件:香頭指向不為空)
{
循環1:鐵頭移動到香頭的下一個指向
循環2:香頭的下一個指向首子
循環3:頭子的下一個跟著香頭
循環4:香頭跟著鐵頭
}
自己用道具操作幾遍,然後把流程背會,以後自己根據流程寫代碼即可。