C語言中鏈表的具體用途 c語言鏈表的用途是什么
C/C++ code 準(zhǔn)備:動(dòng)態(tài)內(nèi)存分配 一、為什么用動(dòng)態(tài)內(nèi)存分配 但我們未學(xué)習(xí)鏈表的時(shí)候,如果要存儲(chǔ)數(shù)量比較多的同類型或同結(jié)構(gòu)的數(shù)據(jù)的時(shí)候,總是使用一個(gè)數(shù)組。比如說我們要存儲(chǔ)一個(gè)班級(jí)學(xué)生的某科分?jǐn)?shù),總是定義一個(gè)float型(存在0.5分)數(shù)組: float score[30]; 但是,在使用數(shù)組的時(shí)候,總有一個(gè)問題困擾著我們:數(shù)組應(yīng)該有多大? 在很多的情況下,你并不能確定要使用多大的數(shù)組,比如上例,你可能并不知道該班級(jí)的學(xué)生的人數(shù),那么你就要把數(shù)組定義得足夠大意兄弟幾個(gè)當(dāng)初一家子,都在一塊住,這就是數(shù)組
后來都成家了,在一起住不方便,就各自分開住了,但形式上還是一家,這就是鏈表
鏈表是數(shù)據(jù)結(jié)構(gòu)中的一個(gè)重要類型,如果你剛學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),因該知道順序表的儲(chǔ)存的優(yōu)點(diǎn)是:它可以從中直接找到你要操作的數(shù)據(jù),缺點(diǎn)是:順序表只能儲(chǔ)存在一段連續(xù)的內(nèi)存空間里。而采用鏈表的存儲(chǔ)就大大提高了內(nèi)存的利用率。你如果數(shù)據(jù)結(jié)構(gòu)剛?cè)腴T,我編寫一個(gè)簡(jiǎn)單的C順序結(jié)構(gòu)供你參考:#define maxsize 100
#include "conio.h"
#include "string.h"typedef struct
{long num;<br> char name[10];<br> int age;<br> float score;<br> }record;
record st[maxsize]={{403002,"wang",18,435.5},{403003,"zhang",19,511.5}, {403001,"hung",18,465.5},{403005,"zhao",17,465.5},{403004,"jiang",18,505.5}}; int len=5;
/*---------------------------------------------------------*/ void output(int n)
{int i;<br> clrscr();<br> printf("\n num name age score \n");<br> printf("\n---------------------------------------- \n");<br> for(i=0;i<n;i++)<br> printf("\n%8ld%10s%9d%11.2f\n",st[i].num,st[i].name,st[i].age,st[i].score);<br> gotoxy(40,24);<br> getch();<br> }/*---------------------------------------------------------*/
void find()
{record x;<br> char name[10];<br> int i,n;<br> while(1)<br> {<br> clrscr();<br> printf("\n\n\n ----find----\n");<br> printf("\n 1. Number \n");<br> printf("\n 2. name \n");<br> printf("\n 0. Return \n");<br> printf("\n \n");<br> printf("\n\n\n Please select :");</p><p> scanf("%d",&n);<br> while(n<0||n>2) scanf("%d",&n);<br> if(n==0) return;<br> if(n==1)<br> {clrscr();<br> gotoxy(5,8);<br> printf("Please input a number for scearch:");<br> scanf("%ld",&x.num);<br> for(i=0;i<len;i++)<br> if(x.num==st[i].num) break;</p><p> }
else
{clrscr();<br> gotoxy(5,8);<br> printf("Please input a name for scearch:");<br> scanf("%s",name);<br> for(i=0;i<len;i++)<br> if(!(strcmp(st[i].name,name))) break;<br> } if(i<len)
{clrscr(); gotoxy(10,5);<br> printf("Found ! The man\'s data is :\n\n");<br> printf("\n num name age score \n");<br> printf("\n---------------------------------------- \n");<br> printf("\n%8ld%10s%9d%11.2f\n",st[i].num,st[i].name,st[i].age,st[i].score);<br> }
else {gotoxy(20,15);printf(" Not found !");}
gotoxy(30,20);
printf(" Press Any key to continue !\n");
getch(); } }
/*---------------------------------------------------------*/
void delete()
{ record x;
char name[10];
int i,n;
while(1)
{
clrscr();
printf("\n\n\n ----delete----\n");
printf("\n 1. Number \n");
printf("\n 2. name \n");
printf("\n 0. Return \n");
printf("\n \n");
printf("\n\n\n Please select :"); scanf("%d",&n);
while(n<0||n>2) scanf("%d",&n);
if(n==0) return;
if(n==1)
{clrscr();<br> gotoxy(5,8);<br> printf("Please input a number for scearch:");<br> scanf("%ld",&x.num);<br> for(i=0;i<len;i++)<br> if(x.num==st[i].num) break;</p><p> }
else
{clrscr();<br> gotoxy(5,8);<br> printf("Please input a name for scearch:");<br> scanf("%s",name);<br> for(i=0;i<len;i++)<br> if(!(strcmp(st[i].name,name))) break;<br> }
if(i<len)
{
for(;i+1<len;i++)
st[i]=st[i+1];
len--;
}
else printf("\nNot found !");
output(len); }
}
/*---------------------------------------------------------*/
void insert()
{record s;<br> float x;<br> char ch;<br> int n;<br> if(len+1>=maxsize)<br> {printf(" Table is full !\n");<br> printf(" Can\'t insert ! Sorry !!\n");<br> }
else
{
printf("\n\nInsert a record ! Are you sure (y/n)?");
ch=getch();
while(ch=='y'||ch=='Y')
{
printf("\n\n position:");scanf("%d",&n);
if(n>len+1||n<1) printf("Position is error !\n");
else
{int j;<br> clrscr(); printf("\n\n\n\n\n");<br> printf("Please input NO. :") ;scanf("%ld",&s.num);<br> printf("\n name :");scanf("%s", s.name);<br> printf("\n age :");scanf("%d", &s.age);<br> printf("\n score:");scanf("%f",&x);<br> s.score=x;</p><p> /* INSERT BEGIN */<br> for(j=len-1;j>=n-1;j--)<br> st[j+1]=st[j];<br> st[j+1]=s;<br> len++;<br> }
printf("\n\nContinue ?(y/n)");
ch=getch();
}
output(len);
} }/*---------------------------------------------------------*/
void append()
{float x;<br> char ch;<br> if(len+1>=maxsize)<br> {printf(" Table is full !\n");<br> printf(" Can\'t append ! Sorry !!\n");<br> }
else
{
printf("\n\nAppend ! Are you sure (y/n)?");
ch=getch();
while(ch=='y'||ch=='Y')
{clrscr(); printf("\n\n\n\n\n");<br> printf("Please input NO. :") ;scanf("%ld",&st[len].num);<br> printf("\n name :");scanf("%s", st[len].name);<br> printf("\n age :");scanf("%d", &st[len].age);<br> printf("\n score:");scanf("%f",&x);<br> st[len].score=x;<br> len++;<br> printf("\n\nContinue ?(y/n)");<br> ch=getch();<br> }
output(len);
}
}/*---------------------------------------------------------*/
void quit()
{clrscr();<br> gotoxy(20,10);<br> printf("Nice to meet you ! Welcome use again !");<br> getch();<br> exit();<br> }
/*---------------------------------------------------------*/
main()
{int n;<br> for(;;)<br> {<br> clrscr();<br> printf("\n\n\n ----menu----\n");<br> printf("\n ******************************");<br> printf("\n 1.find 2.insert \n");<br> printf("\n 3.delete 4.append \n");<br> printf("\n 5.output 0.quit \n");<br> printf("\n\n\n Please select :");</p><p> scanf("%d",&n);<br> while(n<0||n>5)<br> {printf("\n Input error!");<br> printf("\n\nPlease input again !");<br> scanf("%d",&n);<br> }
switch(n)
{case 1:find();break;<br> case 2:insert();break;<br> case 3:delete();break;<br> case 4:append();break;<br> case 5:output(len);break;<br> case 0:quit();<br> }
} }以上代碼 是可以類似于 Access數(shù)據(jù)庫(kù)的 簡(jiǎn)單代碼,如果你希望可以對(duì)數(shù)據(jù)結(jié)構(gòu)方面知識(shí)有更好的 了解可以加我Q863469857
C語言中鏈表的具體用途
鏈表是一種數(shù)據(jù)結(jié)構(gòu) 是一種線形的存儲(chǔ)結(jié)構(gòu) 轉(zhuǎn)一個(gè)小文章 C\/C++ code 準(zhǔn)備:動(dòng)態(tài)內(nèi)存分配 一、為什么用動(dòng)態(tài)內(nèi)存分配 但我們未學(xué)習(xí)鏈表的時(shí)候,如果要存儲(chǔ)數(shù)量比較多的同類型或同結(jié)構(gòu)的數(shù)據(jù)的時(shí)候,總是使用一個(gè)數(shù)組。比如說我們要存儲(chǔ)一個(gè)班級(jí)學(xué)生的某科分?jǐn)?shù),總是定義一個(gè)float型(存在0.5分)數(shù)組...
JAVA中數(shù)組與鏈表有什么區(qū)別?
數(shù)組與鏈表在計(jì)算機(jī)科學(xué)中是兩種常見的數(shù)據(jù)結(jié)構(gòu),它們各自具有不同的特點(diǎn)和用途。數(shù)組是一種有序的元素序列,將具有相同類型的多個(gè)元素集合在一起進(jìn)行命名,這些元素在物理存儲(chǔ)上是連續(xù)的。這意味著數(shù)組中的所有元素都具有相同的數(shù)據(jù)類型,并且可以通過索引快速訪問,但數(shù)組的大小在創(chuàng)建時(shí)就需要確定,不能動(dòng)...
程序性知識(shí)名詞解釋
1. 操作符:在編程語言中,操作符是指用來執(zhí)行特定操作的符號(hào)或關(guān)鍵字。學(xué)習(xí)者需要理解各種操作符的含義和用法,例如加法操作符“+”用于執(zhí)行加法運(yùn)算,賦值操作符“=”用于變量賦值。2. 循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)是編程中的控制結(jié)構(gòu),用于反復(fù)執(zhí)行特定代碼塊。學(xué)習(xí)者需掌握循環(huán)結(jié)構(gòu)的語法和用法,如for循環(huán)、whi...
集合、列表和數(shù)組的區(qū)別
在編程語言中,列表的常見表現(xiàn)形式有數(shù)組與鏈表,而棧與隊(duì)列則是鏈表的特殊應(yīng)用。數(shù)組作為列表的一種特殊實(shí)現(xiàn)形式,其數(shù)據(jù)存儲(chǔ)有序,通過索引來訪問數(shù)組中的內(nèi)容,索引從0開始。數(shù)組內(nèi)元素的存儲(chǔ)是連續(xù)的,每個(gè)元素占用相同內(nèi)存空間。
一文帶你認(rèn)識(shí)30個(gè)重要的數(shù)據(jù)結(jié)構(gòu)和算法
鏈表的一個(gè)相關(guān)應(yīng)用是瀏覽器的上一頁(yè)和下一頁(yè)的實(shí)現(xiàn)。雙鏈表是存儲(chǔ)用戶搜索顯示的頁(yè)面的完美數(shù)據(jù)結(jié)構(gòu)。特性 堆棧是一種抽象數(shù)據(jù)類型,它形式化了受限訪問集合的概念。該限制遵循 LIFO(后進(jìn)先出)規(guī)則。因此,添加到堆棧中的最后一個(gè)元素是您從中刪除的第一個(gè)元素。堆棧可以使用數(shù)組或鏈表來實(shí)現(xiàn)。它們是...
棧是什么結(jié)構(gòu)?
主要用途:函數(shù)調(diào)用和返回,數(shù)字轉(zhuǎn)字符,表達(dá)式求值,走迷宮等等。在CPU內(nèi)部棧主要是用來進(jìn)行子程序調(diào)用和返回,中斷時(shí)數(shù)據(jù)保存和返回。在編程語言中:主要用來進(jìn)行函數(shù)的調(diào)用和返回。可以說在計(jì)算機(jī)中,只要數(shù)據(jù)的保存滿足先進(jìn)后出的原理,都優(yōu)先考慮使用棧,所以棧是計(jì)算機(jī)中不可缺的機(jī)制。隊(duì)列的應(yīng)用:隊(duì)列...
關(guān)于linklist L 和linklist &L的區(qū)別
接下來,讓我們探討為什么會(huì)有這樣的寫法及其用途。當(dāng)函數(shù)的參數(shù)是linklist &L時(shí),意味著在函數(shù)內(nèi)部使用的L將直接引用外部的L變量,類似于全局變量的作用。這意味著,修改函數(shù)中的L實(shí)際上會(huì)直接影響到主函數(shù)中的L的值。這種情況下,如果L的值需要發(fā)生變化,例如在執(zhí)行不帶頭結(jié)點(diǎn)的頭插法建立單鏈表等...
請(qǐng)問在c語言鏈表中head與head->next有什么區(qū)別?head是指向第一個(gè)結(jié)點(diǎn)...
度之類的數(shù)據(jù)或者空著不用,而不用于其他用途,有的鏈表直接從第一個(gè)結(jié)點(diǎn)就開始存放我們想要的數(shù)據(jù);head->next表示指向第二個(gè)結(jié)點(diǎn),head指向第一個(gè)結(jié)點(diǎn),即頭結(jié)點(diǎn),假設(shè)我們的頭結(jié)點(diǎn)不存數(shù)據(jù),那么從第二個(gè)結(jié)點(diǎn)開始才是我們要存的數(shù)據(jù),這時(shí)應(yīng)該使用head->next所指向的結(jié)點(diǎn)開始存數(shù)據(jù) ...
->有什么用途?
->是一個(gè)整體,它是用于指向結(jié)構(gòu)體、C++中的class等含有子數(shù)據(jù)的指針用來取子數(shù)據(jù)。換種說法,如果我們?cè)贑語言中定義了一個(gè)結(jié)構(gòu)體,然后申明一個(gè)指針指向這個(gè)結(jié)構(gòu)體,那么我們要用指針取出結(jié)構(gòu)體中的數(shù)據(jù),就要用到“->”.舉個(gè)例子:struct Data { int a,b,c;}; \/*定義結(jié)構(gòu)體*\/ struct Data *...
廣義表和線性表的區(qū)別?
二、用途不同:1、時(shí)間有序表、排序表、和頻率有序表都可以看做是線性表的推廣。如果按照結(jié)點(diǎn)到達(dá)結(jié)構(gòu)的時(shí)間先后,作為確定結(jié)點(diǎn)之間關(guān)系的,這樣一種線性結(jié)構(gòu)稱之為時(shí)間有序表。2、廣義表被廣泛的應(yīng)用于人工智能等領(lǐng)域的表處理語言LISP語言中。在LISP語言中,廣義表是一種最基本的數(shù)據(jù)結(jié)構(gòu),就連LISP ...
相關(guān)評(píng)說:
和田市粗鏜: ______ 鏈表和隊(duì)列可以用于"飯店點(diǎn)菜","ktv點(diǎn)歌",點(diǎn)好菜,"飯店點(diǎn)菜"的時(shí)候可以更新自己的訂菜信息或取消定單,先點(diǎn)先上; 棧可以用在"集裝箱貨物提取"中,新到的貨物很有可能壓在之前的貨物上,取貨物必須先拿下最上面的貨物,體現(xiàn)了所謂"后進(jìn)先出"的思想,也可以用"從運(yùn)鈔車中取錢"這些事情來體現(xiàn)棧
和田市粗鏜: ______ 申請(qǐng)一塊大小為 sizeof(struct student) 的內(nèi)存并返回這塊內(nèi)存的首地址 (struct student *)是強(qiáng)制類型轉(zhuǎn)換 將其首地址轉(zhuǎn)換為結(jié)構(gòu)體類型 head=(struct student *)malloc(sizeof(struct student)); 是讓鏈表的頭指針指向這塊內(nèi)存的首地址
和田市粗鏜: ______ 鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成.每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù)域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域. 相比于線性表順序結(jié)構(gòu),操作復(fù)雜.由于不必須按順序存儲(chǔ),...
和田市粗鏜: ______ 下面的程序是單鏈表的建立與輸出,都有詳細(xì)的注釋,相信你能看的懂 但要想學(xué)習(xí)鏈表必須得掌握了一定的C語言基礎(chǔ) 下面這個(gè)鏈表的作用是建立5個(gè)結(jié)點(diǎn)的單鏈表,5個(gè)結(jié)點(diǎn)的值輸入以后,依次輸出各個(gè)結(jié)點(diǎn)的值#include<stdio.h>#include<...
和田市粗鏜: ______ #include <stdio.h> typedef struct Link/*雙向鏈表結(jié)構(gòu)體*/ { int data; struct Link *lift; struct Link *right; }linkx,*linky; linky Init();/*建立雙向鏈表*/ void PrLink(linky p);/*輸出雙向鏈表*/ linky Sort(linky head);/*對(duì)雙向鏈表排序*/ linky Swap(linky head,...
和田市粗鏜: ______ 數(shù)組和鏈表都是兩種非常常用的數(shù)據(jù)結(jié)構(gòu),數(shù)組在一開始定義的時(shí)候,就在內(nèi)存里占用了連續(xù)的存儲(chǔ)空間,如果要存放的數(shù)據(jù)用不了這些存儲(chǔ)空間,就會(huì)造成浪費(fèi).鏈表的出現(xiàn)則解決的這一問題,它可以動(dòng)態(tài)地申請(qǐng)內(nèi)存空間,并且這些內(nèi)存空間不要求連續(xù),可以通過結(jié)點(diǎn)里地址域中的指針找到相鄰的結(jié)點(diǎn),從而存儲(chǔ)一連串完整的數(shù)據(jù).
和田市粗鏜: ______ 鏈表是C中一個(gè)很重要的東西用處很大 下面是一個(gè)關(guān)于鏈表例子 #include#include #include struct lb { char name[50]; struct lb *next; }*head,*p,*q; main() { int i=1; head=(struct lb*)malloc(sizeof(struct lb)); head->next=NULL; while(i<=5) { p=(struct lb*)...
和田市粗鏜: ______ 在C語言中,結(jié)構(gòu)體只是一個(gè)單純的數(shù)據(jù)塊,里面不能放方法.當(dāng)然C中沒有類.但是在C++中,結(jié)構(gòu)體中可以放置方法函數(shù),這時(shí)類和結(jié)構(gòu)體是等同的.有點(diǎn)區(qū)別的是,結(jié)構(gòu)體中默認(rèn)所屬是public,類中默認(rèn)是private 兩者可以交叉繼承(class繼承struct或者相反)
和田市粗鏜: ______ 您好! C語言中的鏈表是一種很重要的數(shù)據(jù)結(jié)構(gòu).所謂“數(shù)據(jù)結(jié)構(gòu)”是指數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)以及定義在它們之上的一組運(yùn)算.而鏈表是數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)中的一種,又稱鏈?zhǔn)酱鎯?chǔ).它能夠動(dòng)態(tài)的進(jìn)行存儲(chǔ)分配.舉個(gè)例子來說,如果...
和田市粗鏜: ______ 鏈表是相同抄類型的若干個(gè)結(jié)構(gòu)體用其自身攜帶的指針按照一定順序串聯(lián)成的一個(gè)鏈. 舉個(gè)簡(jiǎn)單例子進(jìn)行襲類比: struct node{ int a; struct node *next; }; 把這個(gè)鏈表節(jié)點(diǎn)的結(jié)構(gòu)2113體struct node看作是人,5261結(jié)構(gòu)體內(nèi)的next指針看作是人的一只手4102,這只手只能用于指向人(別1653人或自己). 如果有多個(gè)人排成一排,每個(gè)人都舉起右手指向右邊的人,就形成一個(gè)人組成的鏈表.