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

單向鏈表c語言

發布時間: 2022-07-21 18:07:12

c語言單向鏈表

name 保存在結構體單元的name[20] 數組里;
typedef struct node
{
char name[20];
struct node *link;
}stud;
這是你前面定義的結構體變數,一個單元包含兩個部分,一個用來存儲name的數組name[20],一個用來存放下一個單元地址的指向結構體node的指針。
假設該單元的地址是p,那麼p->name 表示第一部分name[20]的地址,p->link表示第二部分,作用是存放下一個單元的地址。

--------------》你看不懂的部分如下《-----------------
p->link=s; /*把s的地址賦給p所指向的結點的鏈域,這樣就把p和s所指向的結點連接起來了*/
printf("請輸入第%d個人的姓名",i+1);
scanf("%s",s->name); /*在當前結點s的數據域中存儲姓名*/
s->link=NULL;
p=s;
}

在這段代碼前面是分配一個結構體單元空間,s是這個新分配空間的地址,p是鏈表的尾節點的地址,以鏈表形式說,新分配的應當跟在它後面。
按上面所講,p->link用來存放下一單元的地址,因此有:
p->link=s; 這樣新節點就成為鏈表的一部分了。

printf("請輸入第%d個人的姓名",i+1);
scanf("%s",s->name);
這兩句,是對將需要輸入的名字讀入並且存放在新節點用於存放name 的數組中。

此時,剛開辟的新節點成了尾節點,尾節點不指向任何其它節點,因此s->link=NULL;(NULL是空指針)
(C中處理指針需要小心行事)

p=s; 將p變數賦值為s,即讓其為尾節點的地址,便於繼續添加節點。

② C語言實現一個單向鏈表linked List

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
structnode
{
intdata;
structnode*next;
};
intmain()
{
structnode*h=NULL,*p;
inti;
ints1,s2,s3;

srand(time(NULL));
for(i=0;i<5;i++)
{
if(h==NULL)
h=p=(structnode*)malloc(sizeof(structnode));
else
p=p->next=(structnode*)malloc(sizeof(structnode));

p->data=rand()%10+1;
}
p->next=NULL;
s1=s2=s3=0;
for(p=h;p;p=p->next)
{
if(p->data%2==1)s1+=p->data;
elses2+=p->data;
s3+=p->data;
}
printf("all=%dodd=%deven=%d ",s3,s1,s2);

while(h)
{
p=h->next;
free(h);
h=p;
}
return0;
}

③ C語言單鏈表

C語言創建單鏈表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

intdata;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L->next=NULL;

printf("請輸入第1個數據:");

scanf("%d",&c);

L->data=c;

for(int i=2;i<=n;i++)

{

s=(List)malloc(sizeof(node));

printf("請輸入第%d個數據:",i);

scanf("%d",&c);

s->data=c;

s->next=L;

L->next =s;

}

printf("鏈表創建成功!");

}

void main()

{

int n;

printf("請你輸入鏈表的個數:");

scanf("%d",&n);

create(n);

}

④ 求問c語言單向鏈表和雙向鏈表與循環鏈表的區別

打個比方。把鏈表節點看作是一個人,把鏈表指針看作是人的手(左手是前向指針,右手是後向指針)。
非循環的單向鏈表是這樣的:若干個人排成一排,每個人都抬起右手指向他右邊的人,最右邊的人的右手指向了空氣(NULL)。如果要想找到這一排中任意一個人,必須從排頭(鏈表頭)開始沿手指的方向挨個查找。
循環單向鏈表是這樣的:若干個人圍成一圈,每個人都抬起右手指向他右邊的人,這樣每個人的右手都能指到一個人(如果只有一個人,那麼他的右手指向自己)。從任意一個人開始,沿著手指的方向,可以不停地循環找到每一個人。
非循環的雙向鏈表是這樣的:若干個人排成一排,每個人都抬起左手指向他左邊的人,並且每個人都抬起右手指向他右邊的人,那麼最左邊的人的左手指向了空氣(NULL),最右邊的人的右手指向了空氣(NULL)。如果要想找到這一排中某個目標人,從任意一個人開始,可以沿左手方向嘗試查找,如果找不到,可以繼續沿右手方向查找,直到找到目標人。
循環雙向鏈表是這樣的:若干個人圍成一圈,每個人都抬起左手指向他左邊的人,並且每個人都抬起右手指向他右邊的人,這樣每個人的左右手都可以指到一個人(如果只有一個人,那麼他的左右手都指向自己)。無論選擇左手方向還是右手方向,都可以不停地循環找到每一個人。

⑤ 用C語言編程(創建一個單向鏈表)

設計程序
創建一個
單向鏈表
,並輸出鏈表中數據。要求:從鍵盤
輸入數據
元素個數
和值
,並在此基礎上實現單

⑥ C語言 單向鏈表如何排序

void link_order(STU *p_head)

{

STU *pb, *pf, temp;

pf = p_head;

if(p_head == NULL) {//鏈表為空

printf("needn't order. ");

return ;

}

if(p_head->next == NULL) {//鏈表有1個節點

printf("only one print, needn't order. ");

return ;

}

while(pf->next != NULL) {//以pf指向的節點為基準節點

pb = pf->next;//pb從基準點的下一個節點開始

while(pb != NULL) {

if(pf->num > pb->num) {

temp = *pf;

*pf = *pb;

*pb = temp;

temp.next = pf->next;

pf->next = pb->next;

pb->next = temp.next;

}

pb = pb->next;

}

pf = pf->next;

}

return ;

}

(6)單向鏈表c語言擴展閱讀:

鏈表的排序有三種情況:

1、鏈表為空時:不用排序;

2、鏈表中有一個節點:不用排序;

3、鏈表中兩個及其以上節點時:排序。

return 0代表程序正常退出。return是C++預定義的語句,它提供了終止函數執行的一種方式。當return語句提供了一個值時,這個值就成為函數的返回值。

return語句用來結束循環,或返回一個函數的值。

1、return 0,說明程序正常退出,返回到主程序繼續往下執行。

2、return 1,說明程序異常退出,返回主調函數來處理,繼續往下執行。return 0或return 1對程序執行的順序沒有影響,只是大家習慣於使用return(0)退出子程序而已。

熱點內容
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877
曲馬多存儲 發布:2025-01-31 22:22:52 瀏覽:538
緩存兒歌 發布:2025-01-31 22:21:26 瀏覽:528
學java有發展嗎 發布:2025-01-31 21:44:45 瀏覽:569
HBX編程 發布:2025-01-31 21:39:26 瀏覽:161
資料庫精品課 發布:2025-01-31 21:38:14 瀏覽:421
sqlsever語句 發布:2025-01-31 21:34:57 瀏覽:145