說(shuō)一下一個(gè)大概的思路,首先定義兩個(gè)指針,一個(gè)指針用來(lái)向前移動(dòng)(叫當(dāng)前指針),另一個(gè)指針緊跟其后(叫前驅(qū)指針),這個(gè)主要用于鏈表的增刪,判斷是否要?jiǎng)h除當(dāng)前指針指向的節(jié)點(diǎn),或者增加節(jié)點(diǎn)。如果需要?jiǎng)h除當(dāng)前節(jié)點(diǎn),則前驅(qū)指針的下一個(gè)節(jié)點(diǎn)指向當(dāng)前指針的下一個(gè)節(jié)點(diǎn),釋放當(dāng)前指針指向的節(jié)點(diǎn),然后當(dāng)前指針指向前驅(qū)指針的下一個(gè)節(jié)點(diǎn),增加也是一樣的,一直這樣遍歷整個(gè)鏈表。至于修改節(jié)點(diǎn)數(shù)據(jù),那么需要一個(gè)當(dāng)前指針就夠了,找到要修改的節(jié)點(diǎn),修改就好了。
創(chuàng)新互聯(lián)公司基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)成都西信服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性價(jià)比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
閑著沒(méi)事干,剛寫(xiě)了代碼,給你參考一下:
//?刪除節(jié)點(diǎn)
void?delete_node_credit(float?const?credit)?{
stu?*pre_node?=?head;
stu?*cur_node?=?head-next;
while?(?cur_node?)?{
if?(?cur_node-credit?==?credit?)?{
pre_node-next?=?cur_node-next;
free(cur_node);
cur_node?=?pre_node-next;
}?else?{
pre_node?=?cur_node;
cur_node?=?cur_node-next;
}
}
//?判斷是否刪除頭節(jié)點(diǎn)
if?(?head-credit?==?credit?)?{
cur_node?=?head-next;
free(head);
head?=?cur_node;
}
}
//?新增節(jié)點(diǎn)
void?insert_node_credit(stu?*new_node,?float?const?credit)?{
stu?*pre_node?=?head;
stu?*cur_node?=?head-next;
if?(?pre_node-credit??credit?)?{?//?新增節(jié)點(diǎn)是頭節(jié)點(diǎn)
head?=?new_node;
new_node-next?=?pre_node;
return;
}
while?(?cur_node?)?{
if?(cur_node-credit??credit??pre_node-credit??credit?)?{
pre_node-next?=?new_node;??//?插入新的節(jié)點(diǎn)
new_node-next?=?cur_node;
return;
}
pre_node?=?cur_node;
cur_node?=?cur_node-next;
}
//?新增節(jié)點(diǎn)插入鏈表尾部
if?(?pre_node-credit??credit?)?{
pre_node-next?=?new_node;
return;
}
}
下面是運(yùn)行結(jié)果
如果你看理解了這個(gè)思路,那么鏈表的增刪查改操作就沒(méi)有問(wèn)題了。有用的話點(diǎn)一下采納,謝謝!??!
#include string.h
#include stdio.h
#include stdlib.h//加入三個(gè)頭文件,刪除#DEFINE NULL 0
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}Lnode;
Lnode *head;
void insert(ElemType x,int i)
{
int j=1;
Lnode *s,*q;
s=(Lnode *)malloc(sizeof(Lnode));
s-data=x;
q=head;
if(i==1)
{
s-next=q;
head=s;
}
else
{
while((ji-1)(q-next!=NULL))
{
q=q-next;
j++;
}
if(j==i-1)
{
s-next=q-next;
q-next=s;
}
else
printf("位置參數(shù)不正確!");
}
}
int locate(Lnode *p,ElemType x)
{
int n=0;
Lnode *q=p;
while(q!=NULL q-data!=x)
{
q=q-next;
n++;
}
if(q=NULL)
{
return(-1);
}
else
{
return(n+1);
}
}
main()
{
Lnode *q;
int d,i,n,select,k,flag;
head = NULL;
printf("請(qǐng)輸入數(shù)據(jù)長(zhǎng)度:");
scanf("%d",n);
for(i=1;i=n;i++)
{
printf("將數(shù)據(jù)加入到鏈表中:");
scanf("%d",d);
insert(d,i);
}
printf("\n輸入要查找的數(shù)據(jù):");
scanf("%d",d);//這里小了個(gè)
k=locate(head,d);
printf("%d\n",d);
}
#includestdio.h
#define NULL 0
typedef struct node
{
int key;
struct node *next;
}Node;
Node first;
int main()
{
char c='a';
int k,i,sum=0,flag=0;
Node *p;
p=first;
printf("請(qǐng)輸入鏈表元素(元素之間用空格間隔):\n");
while(c!='\n')
{
scanf("%d",p-key);
p-next=new Node;
p=p-next;
sum++;
c=getchar();
}
p-next==NULL;
printf("請(qǐng)輸入要查找的key值:");
scanf("%d",k);
p=first;
printf("查找符合的節(jié)點(diǎn)序數(shù)為: ");
for(i=0;isum;i++)
{
if(p-key==k)
{
printf("%d ",i+1);
flag=1;
}
p=p-next;
}
if(flag==0)
printf("無(wú)\n查找失敗!\n");
}