【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言DS线性表的链式表示

来源:互联网 发布:淘号软件 编辑:程序博客网 时间:2024/05/16 09:57
#include<stdio.h>#include<stdlib.h>#define ERROR 0#define OK    1typedef int ElemType;typedef int status;typedef struct LNode{ElemType data;struct LNode *next;}LNode,*LinkList;status GetElem_L(LinkList L,int i,ElemType &e){LinkList p=L->next;int j=i;while(p&&j<i){p=p->next;++j;}if(!p||j>i)return ERROR;e=p->data;return OK;}status ListInsert_L(LinkList &L,int i,ElemType e){LinkList p=L;int j=0;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1)return ERROR;LinkList s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}status ListDelete_L(LinkList &L,int i,ElemType &e){LinkList p=L;int j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1)return ERROR;    LinkList q=p->next;p->next=q->next;    e=q->data;free(q);return OK;}void CreateList_L(LinkList &L,ElemType a[],int n){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LinkList q=L;for(int i=0;i<n;i++){LinkList p=(LinkList)malloc(sizeof(LNode));p->data=a[i];p->next=NULL;q->next=p;q=q->next;}}void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){LinkList pa,pb,pc;pa=La->next;pb=Lb->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);}void PRINT(LinkList L){LinkList p=L->next;while(p){printf("%d",p->data);p=p->next;}printf("\n");}void main(){int a[4]={1,2,3,4};int b[5]={7,8,9,10,11};LinkList L1;CreateList_L(L1,a,4);PRINT(L1);ListInsert_L(L1,3,5);PRINT(L1);int e;ListDelete_L(L1,4,e);PRINT(L1);printf("%d\n",e);LinkList L2;CreateList_L(L2,b,5);PRINT(L2);LinkList L3;  MergeList_L(L1,L2,L3);  PRINT(L3);}

原创粉丝点击