您的位置:首页 > 编程语言 > C语言/C++

单链表的增删改查功能实现C语言代码

2018-01-24 10:09 495 查看
上一篇博客写了单链表的创建(头插法,尾插法)现在写数据结构的增删改查
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef int  ELem;typedef struct Node{    int date;    struct Node *next;}Node;typedef  struct Node *Linklist;void chuangjian(Linklist *L,int n){    Linklist p,t;//声明结点    *L=(Linklist)malloc(sizeof(Node));//生成新结点    (*L)->next=NULL;//新结点指向空结点    t=(*L);//中间值    for(int i=0;i<n;i++)    {/*//头插法 p=(Linklist)malloc(sizeof(Linklist));//生成新结点p        scanf("%d",&(p->date));//为新结点的date域赋值        p->next=(*L)->next;//p的后继指向(*L)的后继        (*L)->next=p;*///插入到表头//尾插法    p=(Linklist)malloc(sizeof(Node));//生成新结点p        p->next=NULL;//p结点的后继为空        scanf("%d",&(p->date));//赋值操作        t->next = p;//将表尾终端结点的指针指向新结点        t = p;//将当前结点定义为表尾终端节点    }}void Tiqu(Linklist L,int i,int *e){    int j=1;    Linklist p;    p=L->next;    while (p&&j<i) {        p=p->next;        ++j;    }        *e =p->date;}void shanchu(Linklist *L,int i,int *e){    int j=1;    Linklist p,q;    p=*L;    while (p->next&&j<i) {        p=p->next;        ++j;    }    q=p->next;    *e=q->date;    p->next=p->next->next;    free(q);}void genggai(Linklist *L,int i,int e){    int j=1;    Linklist p;    p=*L;    while (p&&j<i) {        p=p->next;        j++; 
4000
  }    p->next->date=e;}void zengjia(Linklist *L,int i,int x){int j=1;    Linklist p,q;    p=*L;    q=(Linklist)malloc(sizeof(Linklist));    q->next=NULL;    q->date=x;    while (p->next&&j<i) {        p=p->next;        j++;    }    q->next=p->next;    p->next=q;}int main(int argc, const char * argv[]) {    Linklist l,s,p,h;    int a,i,j,q,w,e,r;    printf("请输入要输入多少个数据");    scanf("%d",&a);    chuangjian(&l, a);    p=l;    s=l;    h=l;    while (l->next!=NULL)    {        l=l->next;        printf("%d\t",l->date);    }    printf("请输入要查找第几个数据\n");    scanf("%d",&i);    Tiqu(p,i,&i);    printf("要查找的数据为");    printf("%d\t",i);    printf("\n");    printf("请输入要删除第几个数据");    scanf("%d",&j);    shanchu(&p,j,&j);    printf("删除后的链表为");    while (p->next != NULL)    {        p = p->next;        printf("%d\t",p->date);    }    printf("\n");    printf("删除的数据是");    printf("%d\n",j);    printf("修改第几个位置\n");    scanf("%d",&q);    printf("修改为多少\n");    scanf("%d",&w);    genggai(&s,q,w);      printf("更改获得的链表为\n");    while (s->next != NULL)    {        s = s->next;        printf("%d\t",s->date);    }    printf("\n");    printf("添加的位置\n");    scanf("%d",&e);    printf("添加数据为多少\n");    scanf("%d",&r);    zengjia(&h,e,r);    while (h->next != NULL)    {        h = h->next;        printf("%d\t",h->date);    }    return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: