C语言链表

    xiaoxiao2025-04-11  21

    本博客没有解释只有代码实现:

    //代码实现 #include <stdio.h> #include <stdlib.h> #include <string.h> //链表结点 typedef struct node{ int data; struct node *next; }Node,*Linkedlist; //头插法 Linkedlist headInsert(Linkedlist *L){ Linkedlist p,s; (*L) = s =(Linkedlist)malloc(sizeof(Node)); s->next=NULL; int n; scanf("%d",&n); while(n!=-1){ p=(Linkedlist)malloc(sizeof(Node)); p->data=n; p->next=s->next; s->next=p; scanf("%d",&n); } return s; } //尾插法 Linkedlist tailInsert(Linkedlist *L){ Linkedlist p,s; (*L)=s=(Linkedlist)malloc(sizeof(Node)); s->next=NULL; int n; scanf("%d",&n); while(n!=-1){ p=(Linkedlist)malloc(sizeof(Node)); p->data=n; p->next=NULL; s->next=p; s=p; scanf("%d",&n); } return s; } //增:给第k个结点之后增加一个数X void add(Linkedlist L,int k,int x){ Linkedlist p,s; int i; p=L->next; for(i=1;i<k;i++){ p=p->next; } s=(Linkedlist)malloc(sizeof(Node)); s->data=x; s->next=p->next; p->next=s; } //删:删除第k个结点 void delete(Linkedlist L,int k){ Linkedlist p,s; int i; p=L->next; for(i=1;i<k-1;i++){ p=p->next; } s=p->next; p->next=s->next; free(s); } //改:更改第k个结点的值 void update(Linkedlist L, int k,int x){ Linkedlist p; int i; p=L->next; for(i=1;i<k;i++){ p=p->next; } p->data=x; } //查:查询第k个结点的值 int get(Linkedlist L,int k){ Linkedlist p; int i; p=L->next; for(i=1;i<k;i++){ p=p->next; } return p->data; } //输出链表的所有值 void print(Linkedlist L){ Linkedlist p; p=L->next; while(p){ printf("%d\n",p->data); p=p->next; } } //主函数 int main(){ Linkedlist head=NULL; //头插 head=headInsert(&head); //尾插 head=tailInsert(&head); print(head); //增 add(head,3,5); print(head); //删 delete(head,4); print(head); //改 update(head,4,7); print(head); //查 int n=get(head,4); printf("%d",n); }
    最新回复(0)