當前位置:首頁 » 編程語言 » 鏈表c語言

鏈表c語言

發布時間: 2022-01-08 21:06:17

1. c語言中的鏈表是什麼

就是一連續內存空間,類似於數組,不過數組的內存空間一旦初始化就是不變的。
鏈表開始是一個「頭指針」,定義了鏈表開始的位置,下面是像鏈條一樣的一串節點,每個節點包含數據部分和指針部分。前一節點的指針指向後一節點,最後一個節點是數據和空地址,表示結束。
好處在於空間是動態分配的,需要多長可以一直鏈下去。

2. C語言鏈表

因為insert()是子函數。
在主函數中使用LISTNODEPTR定義的變數(結構體指針),形成一張鏈表,之後要在鏈表中插入某一項,這個時候要傳遞【結構體指針】這樣一個參數,而且我們希望能夠在insert函數中真正改變這個【結構體指針】的值,所以要用傳遞指針的方式傳這個參數(注意因為本身它就是一個指針,所以參數定義要為二級指針!)

3. 關於c語言鏈表

因為你只創建了一個啊,你的本意是用create函數執行創建鏈表的工作,不管多少個都是由它完成的,但是你的create函數明明沒有while循環或者dowhile循環啊,只做了一遍啊,第一遍的if做完了,第一個鏈表完成了,再次scanf了之後,就退出來了啊,在你創建了一個鏈表之後,就在那個鏈表的尾部寫入NULL了,程序就結束了啊,又沒一直做scanf,和創建鏈表的工作。create沒循環啊,列印鏈表是沒錯啊,輸出了第一個啊,你自己創建的第一個叫head,只有後面的鏈接,自己本身沒有存放任何數,只輸出了第二個鏈表,第二鏈表的next就是NULL了,輸出當然就停止了啊。

怕我沒說清楚,或者把你繞暈了,所以我截個圖給你看。

你這個if只做了一遍啊,沒有循環啊,然後就再次用scanf了,然後呢?然後就退出if了吧,然後就執行了r->next=NULL;對吧,r不就是你創建的第一個有數據的鏈表嗎?然後就return h了,那麼只有一個啊,有循環嗎?scanf了之後,也沒判斷數值啊,不是-1,應該繼續做啊。

解決方案:在這個if的外面,加一個do while的循環,然後判斷scanf讀入的n的值,應該就可以了。

4. C語言裡面的鏈表是什麼

C語言裡面的鏈表是一種數據結構
是一種線形的存儲結構
鏈表和數組一樣,也是將一組同類型的數據組織在一起的一種數據結構
不同的是
數組採用的是順序存儲,依靠數組的首地址和元素的相對地址(下標)來實現訪問
優點是訪問方便快捷,而缺點是數組是靜態的,不利於實現元素的動態增減。
而鏈表採用的是離散存儲,依靠節點間的指向下一個節點的指針來實現訪問。
其優缺點和數組相反

5. C語言 鏈表

#include<stdio.h>
#include<stdlib.h>

typedefstructlist{
intdata;
structlist*next;
}SLIST;

SLIST*creatlist(){
/*結點數據在此函數體內部輸入,遇到-1輸入結束*/
SLIST*head,*p;
intnum;
head=p=(SLIST*)malloc(sizeof(SLIST));
printf("輸入一個整數 ");
while(scanf("%d",&num)==1){
p->next=(SLIST*)malloc(sizeof(SLIST));
p->next->data=num;
p=p->next;
printf("輸入一個整數(qtoquit) ");
}
p->next=NULL;
returnhead;
}

voidoutlist(SLIST*h){
/*這里輸出鏈表中各個數據*/
SLIST*p=h->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf(" ");
}

intmain(void){
SLIST*head=creatlist();
outlist(head);
return0;
}

6. C語言鏈表概念

struct node
{
int data;
struct node *next;
}
這個是一個鏈表的定義,next就是本身的一個指針
可以這么理解,鏈表就是一串珠子,每個珠子就是一個結構體,next就是串珠子的線

7. c語言鏈表

指針在x86系統里大小是32位4個位元組,在64位系統是8位元組大小。指針好比一個盒子,盒子里有個東西也就是它指向的內容,內容是一個實體對象的首地址。盒子本身不能存放實體對象,就好比盒子里有張名片,通過名片你可以找到這個人,總不能把人放盒子里吧。
得有這個人然後把找到這個人的名片放盒子里。

8. 在C語言中,什麼是鏈表呀

鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,操作復雜。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而線性表和順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁碟上順序,數據的存取往往要在不同的排列順序中轉換。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面向對象語言,如C,C++和Java依靠易變工具來生成鏈表。

9. c語言鏈表的用途是什麼

1、鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,鏈表比較方便插入和刪除操作。
2、常式:

/*
*對鏈表的綜合操作
*功能有建立,排序,插入,刪除,輸出
*/
#include<stdio.h>
#include<malloc.h>
typedefintElemType;
typedefstructNodeType
{
ElemTypedata;
structNodeType*next;
}NodeType,*LinkType;
LinkTypecreate()
{//建立鏈表,返回鏈表的首地址,頭結點沒有數據
LinkTypehead,p1,p2;
head=(LinkType)malloc(sizeof(NodeType));
p1=head;
while(p1->data!=0)//當data=0時鏈表結束
{
p2=p1;
p1=(LinkType)malloc(sizeof(NodeType));
printf("Enterstudent'sinformation: data=");
scanf("%d",&p1->data);
p2->next=p1;
}
p2->next=NULL;
free(p1);
return(head);
}
voidoutput(LinkTypehead)
{//鏈表的輸出,接收鏈表的首地址
head=head->next;
while(head!=NULL)
{
printf("data=%d ",head->data);
head=head->next;
}
}
LinkTypesort(LinkTypehead)
{//鏈表排序,接收鏈表首地址,返回鏈表首地址
LinkTypeph,p1;
ElemTypetemp;
ph=head->next;
p1=head->next;
while(p1->next!=NULL)//冒泡法
{
ph=head;
while(ph->next!=NULL)
{
if(ph->data>ph->next->data)//按data由小到大排序
{
temp=ph->data;
ph->data=ph->next->data;
ph->next->data=temp;
}
ph=ph->next;
}
p1=p1->next;
}
return(head);
}
LinkTypedel(LinkTypehead)
{//刪除結點,接收鏈表的首地址,返回鏈表的首地址
ElemTypeDelData;
LinkTypeph,p;
ph=head->next;
printf("Enterthedatayouwanttodel: DelData=");
scanf("%d",&DelData);
while(ph!=NULL&&ph->data!=DelData)//尋找要刪除的結點
{
p=ph;
ph=ph->next;
}
if(ph==NULL)//沒有找到要刪除的結點
{
printf("Entererror! ");
return(head);
}
else
{
if(ph==head->next)//刪除頭結點
{
head->next=ph->next;
}
else//刪除其它結點
{
p->next=ph->next;
}
}
free(ph);
return(head);
}
LinkTypeinsert(LinkTypehead)
{//插入結點,接收鏈表首地址,返回鏈表首地址
LinkTypeph,p,insert,temp;
insert=(LinkType)malloc(sizeof(NodeType));
printf("Enterthedatayouwanttoinsert: data=");
scanf("%d",&insert->data);
ph=head->next;
while(ph!=NULL&&ph->data<insert->data)//尋找插入的位置
{
p=ph;
ph=ph->next;
}
if(head->next->data>insert->data)//插入頭部
{
temp=head->next;
head->next=insert;
insert->next=temp;
}
else//插入到其它地方
{
p->next=insert;
insert->next=ph;
}
return(head);
}
voidmain()
{
LinkTypehead;
head=create();
output(head);
printf(" ");
head=sort(head);
output(head);
printf(" ");
head=del(head);
output(head);
printf(" ");
head=insert(head);
output(head);
}
熱點內容
車站的防火配置應符合什麼規定 發布:2024-05-13 05:42:28 瀏覽:665
皓影2驅豪華版有哪些配置 發布:2024-05-13 05:42:26 瀏覽:266
京東方宿舍wifi密碼多少 發布:2024-05-13 05:28:58 瀏覽:496
電腦家庭伺服器搭建 發布:2024-05-13 04:53:41 瀏覽:113
退火演算法matlab 發布:2024-05-13 04:39:17 瀏覽:396
資料庫公式 發布:2024-05-13 04:31:19 瀏覽:593
安卓什麼助手能驗機 發布:2024-05-13 04:26:32 瀏覽:508
如何更改it賬號密碼 發布:2024-05-13 04:26:32 瀏覽:85
源碼包子 發布:2024-05-13 04:26:30 瀏覽:376
機器學習演算法模型 發布:2024-05-13 04:26:30 瀏覽:754