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_L void 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 = e;s->next = p->next; p->next = s; printf("插入成功。"); }//ListInsert_L int 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_L void 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_L void 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_L void 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; }