目錄
創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、小程序定制開(kāi)發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十多年以來(lái),已經(jīng)為上千成都柴油發(fā)電機(jī)各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上千客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。1.創(chuàng)建表結(jié)構(gòu)
2.創(chuàng)建表
3.打印鏈表
4.查找功能的實(shí)現(xiàn)?
5.插入功能的實(shí)現(xiàn)
6.刪除功能的實(shí)現(xiàn)?
7.修改功能的實(shí)現(xiàn)??
8.計(jì)數(shù)功能的實(shí)現(xiàn)??
9.排序功能的實(shí)現(xiàn)?
10.封裝圖書(shū)信息管理系統(tǒng)
創(chuàng)建書(shū)籍信息結(jié)構(gòu)體和每個(gè)結(jié)點(diǎn)的結(jié)構(gòu)體
struct Book
{
char id[20];//ISBN
char name[50];//書(shū)名
int price;//定價(jià)
};//創(chuàng)建書(shū)籍信息結(jié)構(gòu)體
typedef struct LNode {
struct Book data;//書(shū)籍信息結(jié)構(gòu)體
struct LNode* next;//指向下一元素指針
}LNode,*LinkList;
2.創(chuàng)建表前插法創(chuàng)建單鏈表,建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L
//創(chuàng)建鏈表
LinkList CreateList_H(int n) {
LinkList L = (LinkList)malloc(sizeof(LNode));//建立一個(gè)帶頭結(jié)點(diǎn)的空鏈表
int i;
LinkList r;
if (L == NULL)//判斷是否建立成功
{
perror("CreateList_H");
return 0;
}
L->next = NULL;
r = L;//尾指正r指向頭結(jié)點(diǎn)
i = 0;
for ( i = 0; i< n; i++)
{
LinkList p = (LinkList)malloc(sizeof(LNode));//生成新節(jié)點(diǎn)p
if (p == NULL)//判斷是否建立成功
{
perror("CreateList_H");
return 0;
}
scanf("%s %s %d", p->data.id, p->data.name, &(p->data.price));//輸入書(shū)籍信息賦給p結(jié)點(diǎn)上的data
r->next = p;//r指向的結(jié)點(diǎn)next域指向p
p->next = NULL;//p結(jié)點(diǎn)next域指針賦為空指針
r = p;//r指針指向新節(jié)點(diǎn)
}
return L;//返回頭指針L
}
3.打印鏈表正序輸入數(shù)據(jù)創(chuàng)建表
為方便測(cè)試打印鏈表中所有元素
//打印鏈表
void printList(LinkList L){
LinkList p = L->next;//創(chuàng)建p指針指向L的首元結(jié)點(diǎn)
printf("\n");
while (p!=NULL)//遍歷鏈表,直到p為空
{
printf("%s %s %d\n", p->data.id, p->data.name, p->data.price);
p = p->next;
}
}
4.查找功能的實(shí)現(xiàn)?輸入要查找書(shū)籍名,返回書(shū)籍的ISBN
//鏈表查找
LinkList LocateElem(LinkList L,char* find) {
LinkList p = L->next;//創(chuàng)建p指針指向L的首元結(jié)點(diǎn)
while (NULL != p && strcmp(p->data.name,find))//向后掃描,直到p為空或p指向數(shù)據(jù)域的書(shū)籍名相等
{
p = p->next;//p指向下一個(gè)結(jié)點(diǎn)
}
return p;//查找成功返回書(shū)籍地址,查找失敗返會(huì)NULL
}
5.插入功能的實(shí)現(xiàn)測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L printList(L);//打印鏈表 printf("輸入要查找的書(shū)名:"); char find_name[20] = "0"; scanf("%s", find_name); LinkList s = LocateElem(L, find_name);//查找書(shū)名為find_name的書(shū)籍,儲(chǔ)存查找函數(shù)返回的地址 if(s == NULL)//判斷是否查找成功 { printf("查找失敗"); return 0; } printf(s->data.id);//打印返回書(shū)籍地址處的ISBN return 0; }
運(yùn)行結(jié)果:
傳入鏈表L和準(zhǔn)備插入的位置n
要在第n個(gè)位置插入時(shí),要找到第n-1個(gè)位置結(jié)點(diǎn),插入在第n-1個(gè)位置結(jié)點(diǎn)后面。
//鏈表插入
void LinkInsert(LinkList L,int n) {
LinkList p = L;
int i = 0;
for (i = 0; i< n-1; i++)//查找第n-1個(gè)結(jié)點(diǎn)
{
if (p == NULL)//如果p為空,則跳出循環(huán)
break;
p = p->next;
}
if (p == NULL)
{
printf("插入失敗");//若p為空,提示插入失敗
return;
}
else
{
LinkList s = (LinkList)malloc(sizeof(LNode));//生成新結(jié)點(diǎn)s
printf("輸入要插入的書(shū)籍信息:");
scanf("%s %s %d", s->data.id, s->data.name, &(s->data.price));//在s結(jié)點(diǎn)data域存儲(chǔ)書(shū)籍信息
s->next = p->next;
p->next = s;
}
}
6.刪除功能的實(shí)現(xiàn)?測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L printList(L);//打印查看插入前效果 LinkInsert(L, 4);//在鏈表L中第4個(gè)位置插入新結(jié)點(diǎn) printList(L);//打印查看插入后效果 return 0; }
運(yùn)行結(jié)果:
刪除第n個(gè)結(jié)點(diǎn),首先找到第n-1個(gè)結(jié)點(diǎn),臨時(shí)保存第n個(gè)結(jié)點(diǎn)地址,讓第n-1個(gè)結(jié)點(diǎn)的next域指向第n+1個(gè)結(jié)點(diǎn),再釋放第n個(gè)結(jié)點(diǎn)的空間。
//結(jié)點(diǎn)刪除
void ListDelete(LinkList L, int n) {
LinkList p = L;
int i = 0;
for (i = 0; i< n-1; i++)//查找第n-1個(gè)結(jié)點(diǎn)
{
if (p->next == NULL)//如果p的next域?yàn)榭?,則跳出循環(huán)
break;
p = p->next;
}
if (p->next == NULL)
{
printf("刪除失敗");//若p為空,提示刪除失敗
return;
}
else
{
LinkList q = p->next;//保存被刪結(jié)點(diǎn)地址以備釋放
p->next = p->next->next;//p的next域指向被刪地址的后一個(gè)地址
free(q);//釋放q結(jié)點(diǎn)空間
q = NULL;//把q置為空指針
printf("刪除成功");
return;
}
}
7.修改功能的實(shí)現(xiàn)??測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L printList(L);//打印查看刪除前效果 ListDelete(L, 5);//刪除鏈表L中第5個(gè)元素 printList(L);//打印查看刪除后效果 return 0; }
運(yùn)行結(jié)果:
調(diào)用查找函數(shù)查找要修改的結(jié)點(diǎn)后修改
//修改鏈表
void modifyList(LinkList L) {
char find_name[50] = "0";
printf("輸入要修改結(jié)點(diǎn)的書(shū)籍名:\n");
scanf("%s", find_name);
LinkList p = LocateElem(L, find_name);//調(diào)用查找函數(shù),返回地址存儲(chǔ)在p指針中
if (p == NULL)//判斷查找是否成功
{
printf("修改失敗,查找未完成\n");
return;
}
printf("輸入修改書(shū)籍信息:\n");
scanf("%s %s %d", p->data.id, p->data.name, &(p->data.price));//修改書(shū)籍信息
printf("修改成功");
}
8.計(jì)數(shù)功能的實(shí)現(xiàn)??測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L printList(L);//打印鏈表 modifyList(L);//修改 printList(L);//打印鏈表 return 0; }
運(yùn)行結(jié)果:
//計(jì)數(shù)
int countList(LinkList L) {
LinkList p = L->next;//創(chuàng)建p指針指向L的首元結(jié)點(diǎn)
int count = 0;//創(chuàng)建count計(jì)數(shù)
while (p != NULL)//遍歷鏈表,直到p為空
{
count++;
p = p->next;
}
return count;//返回count
}
9.排序功能的實(shí)現(xiàn)?測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L //printList(L);//打印鏈表 int count = countList(L);//返回元素個(gè)數(shù) printf("鏈表元素個(gè)數(shù)為%d\n", count); //printList(L);//打印鏈表 return 0; }
運(yùn)行結(jié)果:
使用冒泡排序的方法,比較兩個(gè)結(jié)點(diǎn)data.id域的字符串,詳情可查看冒泡排序(超詳細(xì))
函數(shù)strcmp的功能是比較兩個(gè)字符串的大小。也就是把兩個(gè)字符串從首字符開(kāi)始逐個(gè)字符的進(jìn)行比較,直到某個(gè)字符不相同或者其中一個(gè)字符串比較完畢才停止比較。字符的比較為ASCII碼的比較。
//排序鏈表
void sortList(LinkList L) {
int count = countList(L);//調(diào)用計(jì)數(shù)函數(shù)計(jì)算鏈表元素個(gè)數(shù)n
int i = 0;
for (i = 0; i< count - 1; i++)//外層循環(huán),遍歷n-1個(gè)元素
{
int num = count - 1 - i;//記錄內(nèi)層循環(huán)所需次數(shù)
LinkList p = L->next;//令p指向L的首元結(jié)點(diǎn)
LinkList q = p->next;//令q指向p的下一個(gè)結(jié)點(diǎn)
LinkList tail = L;//L儲(chǔ)存p的前一個(gè)結(jié)點(diǎn)
while (num--)//內(nèi)層循環(huán)
{
if (strcmp((p->data.id), (q->data.id)) >0)//調(diào)用strcmp函數(shù)比較p結(jié)點(diǎn)和q結(jié)點(diǎn)的data.id域內(nèi)的字符串
{
//交換p結(jié)點(diǎn)和q結(jié)點(diǎn)
p->next = q->next;
q->next = p;
tail->next = q;
}
tail = tail->next;//tail指向下一結(jié)點(diǎn)
p = tail->next;//p指向tail的下一結(jié)點(diǎn)
q = p->next;//q指向p的下一結(jié)點(diǎn)
}
}
printf("排序完成!\n");
}
10.封裝圖書(shū)信息管理系統(tǒng)測(cè)試:
int main() { LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L printList(L);//打印鏈表 sortList(L);//排序 printList(L);//打印鏈表 return 0; }
運(yùn)行結(jié)果:
void menu()
{
printf("********************************\n");
printf("***** 1.打印 2.查找 *****\n");
printf("***** 3.插入 4.刪除 *****\n");
printf("***** 5.修改 6.計(jì)數(shù) *****\n");
printf("***** 7.排序 0.退出 *****\n");
printf("********************************\n");
}
int main()
{
LinkList L = CreateList_H(10);//建立n個(gè)元素的鏈表,正序輸入書(shū)籍信息,返回頭指針L
int input = 0;//儲(chǔ)存輸入的值
int n = 0;
do
{
menu();//打印菜單
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("打印:\n");
printList(L);//打印鏈表
break;
case 2:
printf(""); printf("輸入要查找的書(shū)名:");
char find_name[20] = "0";
scanf("%s", find_name);
LinkList s = LocateElem(L, find_name);//查找書(shū)名為find_name的書(shū)籍,儲(chǔ)存查找函數(shù)返回的地址
if(s == NULL)//判斷是否查找成功
{
printf("查找失敗");
return 0;
}
printf(s->data.id);//打印返回書(shū)籍地址處的ISBN
printf("\n");
break;
case 3:
printf("輸入要插入的位置:");
scanf("%d", &n);
LinkInsert(L, n);//在鏈表L中第4個(gè)位置插入新結(jié)點(diǎn)
break;
case 4:
printf("輸入要?jiǎng)h除的位置:");
scanf("%d", &n);
ListDelete(L, n);//刪除鏈表L中第5個(gè)元素
break;
case 5:
modifyList(L);//修改
break;
case 6:
{
int count = countList(L);//返回元素個(gè)數(shù)
printf("鏈表元素個(gè)數(shù)為%d\n", count);
break;
}
case 7:
sortList(L);//排序
break;
case 0:
printf("退出程序\n");
break;
default:
printf("輸入錯(cuò)誤,請(qǐng)重新選擇:\n");
break;
}
} while (input);//輸入值為0時(shí)退出
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:初識(shí)數(shù)據(jù)結(jié)構(gòu):鏈表實(shí)現(xiàn)圖書(shū)信息管理系統(tǒng)(C語(yǔ)言,僅供參考)-創(chuàng)新互聯(lián)
本文URL:http://m.rwnh.cn/article28/espcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、標(biāo)簽優(yōu)化、面包屑導(dǎo)航、網(wǎng)站營(yíng)銷(xiāo)、App開(kāi)發(fā)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容