本文目錄一覽:
- 1、C語言中,結構體與鏈表是什麼關係?
- 2、c語言結構體鏈表
- 3、C語言鏈表概念
- 4、C語言 怎麼把結構體數組寫入鏈表?
- 5、C語言中怎樣用鏈表保存結構體數據(動態數據結構)
- 6、C語言鏈表簡介和舉例!
C語言中,結構體與鏈表是什麼關係?
可以用結構體來實現鏈表啊。結構體相當於一種數據類型。鏈表是數據結構的一種,可以用結構體來實現鏈表。
希望採納
c語言結構體鏈表
結構體定義指針應該是這樣的: node *p;或者struct Node *p;
在定義/聲明函數時,void as(struct node *p);這樣是不對的。應該是這樣:
void as(struct Node *p);
或者
void as(node *p);
函數調用的時候不用指針直接放入結構體該是這樣調用的:
node stnod;
as(stnod);
它和
node stnod,*p_stnod;
p_stnod=stnod;
as(p_stnod);
作用是一樣的。
C語言鏈表概念
簡單說來,就是通過指針指向,把兩個結構體連接起來。比如定義下面這個結構體
struct node
{
int data;
struct node *next;
}
可以看到結構體裡面定義了一個自身類型的指針,通過讓指針指向另外一個結構體,我們就能通過結構體裡面的next變量訪問下個結構體裡面的內容,而通過下一個結構體,同樣可以通過下一個結構體的next指向,找到下一個這種類型的結構體,這樣就形成了所謂的鏈表。
C語言 怎麼把結構體數組寫入鏈表?
1.用頭插法。因為數據追加和刪除比較多,追加的話,頭插法可以直接插,用尾插降低了時間效率,刪除用兩個一樣。
2./*結構體定義*/
struct client{
char account[14];
char name[10];
char identity[20];
char address[15];
long int money;
};
/*鏈表結點定義*/
struct node{
struct client band_inf;
struct node *next;
};
應該把結構體結點定義成鏈表的成員,這樣鏈表才對。如果像你那樣定義的話,完全不用定義結構體,鏈表就搞定了。因為你在鏈表裡面把結構的成員都又定義了。
3.
1),定義結點:p1=(struct node*)malloc(sizeof(struct node)) ;表示定義一個node型的結點指針
使用,這個要看具體怎麼用了。比如說刪除searchp,priorp是searchp的前面一個結點,這樣寫
priorp-next=searchp-next;
delete searchp; 即可
插入newnode在searchp的後面,可以這樣:
newnode-next=searchp-next;
C語言中怎樣用鏈表保存結構體數據(動態數據結構)
鏈表有多種形式,如:單向鏈表,雙向鏈表,單向循環鏈表,雙向循環鏈表。將鏈表結構定義為list_t,則該類型中一定(至少)存在一個指向下一節點的指針list_t
*next;除了這個指針,list_t
中可以包含其它類型的數據,包括結構體變量。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;
C語言鏈表簡介和舉例!
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,鏈表比較方便插入和刪除操作。
/*
*對鏈表的綜合操作
*功能有建立,排序,插入,刪除,輸出
*/
#includestdio.h
#includemalloc.h
typedef int ElemType;
typedef struct NodeType
{
ElemType data;
struct NodeType *next;
} NodeType,*LinkType;
LinkType create()
{//建立鏈表,返回鏈表的首地址,頭結點沒有數據
LinkType head,p1,p2;
head=(LinkType)malloc(sizeof(NodeType));
p1=head;
while(p1-data!=0)//當data=0時鏈表結束
{
p2=p1;
p1=(LinkType)malloc(sizeof(NodeType));
printf(“Enter student’s information:\ndata=”);
scanf(“%d”,p1-data);
p2-next=p1;
}
p2-next=NULL;
free(p1);
return(head);
}
void output(LinkType head)
{//鏈表的輸出,接收鏈表的首地址
head=head-next;
while(head!=NULL)
{
printf(“data=%d\n”,head-data);
head=head-next;
}
}
LinkType sort(LinkType head)
{//鏈表排序,接收鏈表首地址,返回鏈表首地址
LinkType ph,p1;
ElemType temp;
ph=head-next;
p1=head-next;
while(p1-next!=NULL)//冒泡法
{
ph=head;
while(ph-next!=NULL)
{
if(ph-dataph-next-data)//按data由小到大排序
{
temp=ph-data;
ph-data=ph-next-data;
ph-next-data=temp;
}
ph=ph-next;
}
p1=p1-next;
}
return(head);
}
LinkType del(LinkType head)
{//刪除結點,接收鏈表的首地址,返回鏈表的首地址
ElemType DelData;
LinkType ph,p;
ph=head-next;
printf(“Enter the data you want to del:\nDelData=”);
scanf(“%d”,DelData);
while(ph!=NULL ph-data!=DelData)//尋找要刪除的結點
{
p=ph;
ph=ph-next;
}
if(ph==NULL)//沒有找到要刪除的結點
{
printf(“Enter error!\n”);
return(head);
}
else
{
if(ph==head-next)//刪除頭結點
{
head-next=ph-next;
}
else//刪除其它結點
{
p-next=ph-next;
}
}
free(ph);
return(head);
}
LinkType insert(LinkType head)
{//插入結點,接收鏈表首地址,返回鏈表首地址
LinkType ph,p,insert,temp;
insert=(LinkType)malloc(sizeof(NodeType));
printf(“Enter the data you want to insert:\ndata=”);
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);
}
void main()
{
LinkType head;
head=create();
output(head);
printf(“\n\n”);
head=sort(head);
output(head);
printf(“\n\n”);
head=del(head);
output(head);
printf(“\n\n”);
head=insert(head);
output(head);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/254634.html