當前位置:首頁 » 編程語言 » c語言鏈表入門
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言鏈表入門

發布時間: 2022-08-01 06:36:20

c語言中怎麼定義鏈表,最好把各個代碼都詳細的解釋一下!

/*creat
a
list*/
#include
"stdlib.h"
#include
"stdio.h"
struct
list
{
int
data;
struct
list
*next;
};
typedef
struct
list
node;
typedef
node
*link;
void
main()
{
link
ptr,head;
int
num,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("please
input
5
numbers==>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4)
ptr->next=NULL;
else
ptr=ptr->next;
}
ptr=head;
while(ptr!=NULL)
{
printf("The
value
is
==>%d\n",ptr->data);
ptr=ptr->next;
}
}
上面是一個簡單的創建鏈表的C程序。所謂鏈表形象的講就是一個數據塊裡面存有數據,並且存有下一個數據的指針,這樣一個指一個形成一個數據鏈。這個數據鏈可以被操作,例如插入數據,刪除數據,等。至於指令,首先定義一個結構體,它存有數據和指向下一個數據塊的指針。然後分配空間。注意最後一個為NULL,當然你也可以指向開頭一個數據塊形成一個循環鏈表。

② C語言鏈表簡介和舉例!

C語言鏈表有單鏈表、雙向鏈表、循環鏈表。單鏈表由數據域和指針域組成,數據域存放數據,指針域存放該數據類型的指針便於找到下一個節點。雙鏈表則含有頭指針域、數據域和尾指針域,域單鏈表不同,雙鏈表可以從後一個節點找到前一個節點,二單鏈表則不行。循環鏈表就是在單鏈表的基礎上,將頭結點的地址指針存放在最後一個節點的指針域里以,此形成循環。此外還有雙向循環鏈表,它同時具有雙向鏈表和循環鏈表的功能。

單鏈表如:

③ C語言中有關鏈表的基礎知識

鏈表的關鍵就在這里:
struct
node
*
pnext;
你要遍歷的時候,可以通過pnext獲得下一個struct
node的地址。
比如struct
node
a,它的下一個是struct
node
b,這樣,a->pnext
=
&b

④ 我是c語言的初學者(自學)學到鏈表是看不太懂了,現求簡單一點的鏈表的入門知識

先把指針看明白了,
不論單鏈表還是雙向鏈表都是一指針為基礎的.指針在c語言中很重要,也是最難明白的,好象現在流行的其它高級語言都不支持指針了.只要能把指針弄明白了,鏈表就簡單了.

⑤ C語言的鏈表怎麼用

c語言中,動態鏈表的使用方法:
1、創建節點的結構體類型,裡面要有一個指向此類型結構的指針。
2、建立一個頭指針,一個尾指針
3、每次有新節點進入鏈表時,用malloc分配空間,然後用鏈表尾端的節點指針指向新節點,新節點的指針指向null。

⑥ C語言鏈表的使用方法

D
答案D設置完,p就從鏈表中丟掉了。
p就是一個指向結構體node的指針。
p->next就是p包含的執行下一個node的指針,在本題,就是q。

⑦ 如何用C語言編寫一個鏈表

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"

struct Node
{
int data;//數據域
struct Node * next;//指針域
};

/*************************************************************************************
*函數名稱:Create
*函數功能:創建鏈表.
*輸入:各節點的data
*返回值:指針head
*************************************************************************************/
struct Node * Create()
{
struct Node *head,*p1,*p2;
head = NULL;
p1 = p2 = (struct Node *)malloc(sizeof(struct Node));
printf("Input the linklist (Input 0 to stop):\n");
scanf("%d",&p1->data);
while(p1->data!=0)
{
if(head == NULL){
head = p1;
}else{
p2->next = p1;
p2 =p1;
}
p1 = (struct Node *)malloc(sizeof(struct Node));
scanf("%d",&p1->data);
}
p2->next = NULL;
return head;
}
/*************************************************************************************
*函數名稱:insert
*函數功能:在鏈表中插入元素.
*輸入:head 鏈表頭指針,p新元素插入位置,x 新元素中的數據域內容
*返回值:無
*************************************************************************************/
void insert(struct Node * head,int p,int x)
{
struct Node * tmp = head;
struct Node * tmp2 ;
int i ;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return ;
if(i<p-1)
tmp = tmp->next;
}
tmp2 = (struct Node *)malloc(sizeof(struct Node));
tmp2->data = x;
tmp2->next = tmp->next;
tmp->next = tmp2;
}
/**************************************************************************************
*函數名稱:del
*函數功能:刪除鏈表中的元素
*輸入:head 鏈表頭指針,p 被刪除元素位置
*返回值:被刪除元素中的數據域.如果刪除失敗返回-1
**************************************************************************************/
int del(struct Node * head,int p)
{
struct Node * tmp = head;
int ret , i;
for(i = 0;i<p;i++)
{
if(tmp == NULL)
return -1;
if(i<p-1)
tmp = tmp->next;
}
ret = tmp->next->data;
tmp->next = tmp->next->next;
return ret;
}
/**************************************************************************************
*函數名稱:print
*函數功能:列印鏈表中的元素
*輸入:head 鏈表頭指針
*返回值:無
**************************************************************************************/
void print(struct Node *head)
{
struct Node *tmp;
for(tmp = head; tmp!=NULL; tmp = tmp->next)
printf("%d ",tmp->data);
printf("\n");
}
/**************************************************************************************
*函數名稱:main
*函數功能:主函數創建鏈表並列印鏈表。
**************************************************************************************/
int main(){
struct Node * head = Create();
print(head);
return 0;
}

⑧ 用c語言寫一個簡單的鏈表,具體要怎麼用代碼實現

struct
stu
{
char
a[10];
char
e[4];
char
c[14];
char
d[30];
struct
stu*b;
};
struct
stu
*creat(struct
stu*head,char
c)
//功能1:創建鏈表
{
while(c-'y'==0||c-'y'==0)
{
printf("請輸入姓名,性別,電話號碼,e-mail地址\n");
head=insert(head);
printf("是否繼續輸入y/n\n");getchar();
scanf("%c",&c);system("cls");
}
if(c-'n'==0||c-'n'==0)
return
head;
else
{
printf("是否繼續輸入y/n\n");
getchar();
scanf("%c",&c);
system("cls");
return
(creat(head,c));
}
}

⑨ C語言鏈表要怎麼學啊

鏈表是一個很簡單的結構,對於單鏈表來說,它的每一個節點都是一個結構,在這個結構中有兩個變數,一個用來數據,為你想要存放的數據類型,一個是這種結構類型的指針,指向下一個結構類型。
當需要定義一個鏈表時首先定義一個頭指針或者頭結點(頭結點鍾不存放任何數據,所以可以用頭指針來代替。)插入數據有三種方法,一是在頭部插入,一是在尾部插入,一是在中間某個節點位置插入。
在頭部插入時,要首先把原來的頭指針的地址付給當前節點的指針,然後讓頭指針指向這一個節點。這樣要是獲取原有的第一節點時(頭指針假設為0),就需要首先通過頭結點的指針找到當前節點,在通過當前節點的指針找到原來的1節點(不過現在應該是第二個了)。
另外的兩種於這個類似,就不再贅述了。
鏈表就是這個樣子,只能通過指針一個一個的找,查詢與遍歷都非常的費事,但是插入與刪除時節省了大量的數據移動的時間。而且長度是不受限制。
你不理解鏈表的實質是你對指針和它的使用機制不熟悉,你嘗試把書上的代碼敲到電腦上,一行一行的編寫注釋,然後編寫測試程序,體驗各種操作,你就能明白了,但是要想徹底明白還是要寫很多的有關指針的程序以後,徹底明白了指針,才能明白。

⑩ 鏈表入門級c語言問題

  1. VC6.0和VS2010使用的c語音標準是不同的,vs2010更新一些。另外路徑中盡量少用中文

  2. 為何要將結構體又命名為指針類型呢?*PNODE,NODE;

    直接下面 不就可以了么?(其實}後面要寫的是你在程序中想將那個結構體以什麼名字表示)

    typedef struct Node

    {

    int data;

    struct Node *pNext;

    }PNODE;