首页 > 代码库 > C语言之单链表的使用

C语言之单链表的使用

#include <stdio.h>#include <stdlib.h>typedef struct  LNode{    int    data;    struct LNode    *next;}LNode, *LinkList;void GetElem_L(LinkList L,int i,int e){    //L为带头结点的单链表的头指针。    //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR    LNode *p = L->next;int j = 1;    while(p&&j<i){        p = p->next;++j;    }    e = p->data;    printf("获取的值:%d\n",e);    }//GetElem_Lvoid ListInsert_L(LinkList L,int i,int e){//在带头节点的单链线性表L中第i个人位置之前插入元素e    LinkList p = L; int j=0;    while(p&&j<i-1){p=p->next;++j;} //寻找第i-1个节点。    LinkList s = (LinkList)malloc(sizeof(LNode));    s->data = http://www.mamicode.com/e;s->next = p->next;    p->next = s;     printf("插入成功。");}//ListInsert_Lint ListDelete_L(LinkList L,int i,int e){    LinkList p = L;int j = 0;    while(p->next&&j<i-1){//寻找第i个节点并令p指向其前趋        p = p->next;  ++j;     }    LNode *q = p->next; p->next = q->next;    e = q->data; free(q);    return e;}//ListDelete_Lvoid CreateList_L(LinkList *L,int n){    (*L) = (LinkList)malloc(sizeof(LNode));    (*L)->next = NULL;  //建立一个带头结点的单链表    for(int i = n;i>0;--i){        LinkList p = (LinkList)malloc(sizeof(LNode));  //生成新的结点        scanf("%d",&p->data);        p->next = (*L)->next; (*L)->next = p;     }     printf("表格创建成功");}//CreateList_Lvoid MergeList_L(LinkList La,LinkList Lb,LinkList Lc){    //已知单链线性表La和Lb的元素按值非递减排列。    //归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。    LNode *pa = La->next; LNode *pb = pb->next;    LNode *pc = Lc->next;    Lc = pc = La;    while(pa && pb){        if(pa->data <= pb->data){            pc->next = pa;pc = pa;pa = pa->next;        }        else{pc->next = pb;pc = pb;pb = pb->next;}    }     pc->next = pa ? pa:pb;  //插入剩余段。    free(Lb); }//MergeList_Lvoid main(){    LinkList L;    int n;    printf("请输入数据的数量:\n");    scanf("%d",&n);    CreateList_L(&L,n);    printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");    int i;    scanf("%d",&i);    int g=1;    while(g==1)    {        if(i==1){            int e;            printf("请输入你们要插入的元素:\n");            scanf("%d",&e);            printf("请输入你想要插入的位置:\n");            int k;            scanf("%d",&k);            ListInsert_L(L,k,e);            printf("请选择你是否要退出还是继续:1为继续;2为退出\n");            g=0;            scanf("%d",&g);            printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");            i=0;              scanf("%d",&i);        }        if(i==2){            int e;            printf("请输入你想要获取元素的位置:\n");            int k;            scanf("%d",&k);            GetElem_L(L,k,e);            printf("请选择你是否要退出还是继续:1为继续;2为退出\n");            g=0;            scanf("%d", &g);            printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");            i=0;              scanf("%d", &i);        }            if(i==3){            int e;            printf("请输入你想要删除的位置:\n");            int k;            scanf("%d",&k);            ListDelete_L(L,k,e);            printf("请选择你是否要退出还是继续:1为继续;2为退出\n");            g=0;            scanf("%d", &g);            printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");            i=0;              scanf("%d", &i);        }            }    return 0; }

 

C语言之单链表的使用