首页 > 代码库 > 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语言之单链表的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。