首页 > 编程语言 > 详细

C语言实现单向链表

时间:2017-01-25 13:29:16      阅读:324      评论:0      收藏:0      [点我收藏+]
  1 #include <cstdio>
  2 using namespace std;
  3 struct LNode{
  4     int data;
  5     struct LNode * next;
  6 };
  7 struct LinkList{
  8     LNode * head,tail;
  9     int len;
 10 };
 11 void InitList(LinkList &L){
 12     L.len = 0;
 13     L.head->next = NULL;
 14 }
 15 void CreateList_L(LinkList &L,int n){
 16     L.len = n;
 17     LNode* & head = L.head;
 18     head = new LNode();
 19     head -> next =NULL;
 20     while(n--){
 21         LNode *p = new LNode();
 22         scanf("%d",&p->data);
 23         p->next = head->next;
 24         head->next=p;
 25     }
 26 }
 27 void CreateList(LinkList &L,int n){
 28     L.len = n;
 29     L.head = new LNode;
 30     LNode *p = L.head;
 31     while(n--){
 32         LNode * t =new LNode();
 33         scanf("%d",&t->data);
 34         p->next = t;
 35         p = t;
 36     }
 37     p->next  = NULL;
 38 }
 39 void ListTraverse(LinkList L,void (visit)(LNode*)){
 40     LNode *p =L.head->next;
 41     while(p!=NULL){
 42         visit(p);
 43         p = p->next;
 44     }
 45 }
 46 int ListInsert_L(LinkList &L,int i, int data){
 47     LNode * p =L.head;
 48     int j = 0;
 49     while(p&&j++<i ){
 50         p=p->next;
 51     }
 52     if(!p || i<0)return 0;
 53     LNode *t = new LNode();
 54     t->data = data;
 55     t->next = p->next;
 56     p->next = t;
 57     L.len++;    
 58     return 1;
 59 }
 60 int ListDelete_L(LinkList &L,int i,int &data){
 61     LNode *p = L.head;
 62     int j=0;
 63     while(p&&j++<i){
 64         p = p->next;
 65     }
 66     if(!(p->next) || i <0)return 0;
 67     LNode *t = p->next;
 68     p->next = p->next->next;
 69     data=t->data;
 70     delete t;
 71     L.len--;
 72     return 1;
 73 }
 74 int GetElem_L(LinkList L,int i,int &data){
 75     LNode *p = L.head;
 76     int j=0;
 77     while(p && j++<=i) p=p->next;
 78     if(!p|| i<0 )return 0;
 79     data=p->data;
 80     return 1;
 81 }
 82 int MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
 83     LNode *pa = La.head -> next;
 84     LNode *pb = Lb.head -> next;
 85     Lc.head=new LNode();
 86     LNode *pc = Lc.head;
 87     while(pa&&pb){
 88         if(pa->data < pb->data){
 89             pc->next = pa;
 90             pa = pa->next;
 91         }
 92         else{
 93             pc->next = pb;
 94             pb = pb->next;
 95         }
 96         pc = pc -> next;
 97     }
 98     pc->next = pa == NULL?pb:pa;
 99 }
100 void visit(LNode *p){
101     printf("%d\n",p->data);
102 }
103 int main(){
104     LinkList list,list2,list3 ;
105   //  InitList(list);
106     CreateList(list,5);
107     CreateList(list2,5);
108     MergeList(list,list2,list3);
109     //ListInsert_L(list,-1,6);
110     //int v =123;
111     //GetElem_L(list,4,v);
112     //printf("%d",v);
113     ListTraverse(list3,visit);
114     return 0;
115 }

 

C语言实现单向链表

原文:http://www.cnblogs.com/Wade-/p/6349344.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!