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