C语言实现的链表的增删查找

  1 #include <stdio.h>
  2 #include<malloc.h>
  3 
  4 typedef struct Node
  5 {
  6     int val;
  7     struct Node * pNext;
  8 }Node,* pNode;
  9 
 10 pNode creat_list();
 11 void trevel_list(pNode);
 12 void sort_list(pNode);
 13 void insert_list(pNode,int,int);
 14 int length_list(pNode);
 15 int delete_list(pNode,int);
 16 void search_list(pNode,int);
 17 
 18 void main()
 19 {
 20     pNode pHead = creat_list();
 21     printf("输入后信息如下:\n");
 22     trevel_list(pHead);
 23     printf("\n排序之后如下:\n");
 24     sort_list(pHead);
 25     trevel_list(pHead);
 26     printf("\n链表长度位:\n");
 27     printf("%d",length_list(pHead));
 28     printf("\n删除第三个数字为:\n");
 29     printf("%d",delete_list(pHead,3));
 30     printf("\n删除之后如下:\n");
 31     trevel_list(pHead);
 32     printf("\n删除之后链表长度为:\n");
 33     printf("%d",length_list(pHead));
 34     printf("\n在第5个位置插入一个节点\n");
 35     insert_list(pHead,5,15);
 36     printf("\n插入之后如下:\n");
 37     trevel_list(pHead);
 38     search_list(pHead,15);
 39 }
 40 
 41 pNode creat_list()
 42 {
 43     pNode pHead,pTail,pNew;
 44     int len,i;
 45     scanf("%d",&len);
 46     pHead = (pNode)malloc(sizeof(Node));
 47     pTail = pHead;
 48     pTail->pNext = NULL;
 49     for (i = 0; i < len; i++)
 50     {
 51         pNew = (pNode)malloc(sizeof(Node));
 52         scanf("%d",&pNew->val);
 53         pTail->pNext=pNew;
 54         pTail = pNew;
 55         pTail->pNext = NULL;
 56     }
 57     return pHead;
 58 }
 59 
 60 void trevel_list(pNode pHead)
 61 {
 62     pNode t = pHead->pNext;
 63     while(t != NULL)
 64     {
 65         printf("%d ",t->val);
 66         t = t->pNext;
 67     }
 68 }
 69 
 70 void sort_list(pNode pHead)
 71 {
 72     pNode p,q;
 73     int i,j,temp,len;
 74     len=length_list(pHead);
 75     for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
 76     {
 77         for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
 78         {
 79             if(p->val > q->val)
 80             {
 81                 temp = p->val;
 82                 p->val = q->val;
 83                 q->val = temp;
 84             }
 85         }
 86     }
 87 }
 88 
 89 void insert_list(pNode pHead,int pos,int val)
 90 {
 91      pNode p,t;
 92      int len = length_list(pHead); 
 93      if(pos>len)
 94          printf("插入失败!!!\n");
 95     else 
 96     {
 97         p = pHead->pNext;
 98         pos--;
 99         while(pos--)
100         {
101             p = p->pNext;
102         }
103         t = (pNode)malloc(sizeof(Node));
104         t->val = val;
105         t->pNext = p->pNext;
106         p->pNext = t;
107     }
108 }
109 
110 int delete_list(pNode pHead,int pos)
111 {
112     int i,val,len;
113     pNode t,p=pHead;
114     len = length_list(pHead);
115     if(pos>len)
116         printf("删除失败!!!\n");
117     else
118     {    pos--;
119         while(pos--)
120         {
121             p=p->pNext;
122         }
123         t = p->pNext;
124         p->pNext = t->pNext;
125         val = t->val;
126         free(t); 
127     }
128     return val;
129 }
130 
131 int length_list(pNode pHead)
132 {
133     int len = 0;
134     pNode t = pHead->pNext;
135     while(t != NULL)
136     {
137         len++;
138         t = t->pNext;
139     }
140     return len;
141 }
142  
143  void search_list(pNode pHead, int val)
144  {
145      pNode p = pHead->pNext;
146      int n=0;
147     while(p!=NULL)
148     {
149         n++;
150         if(p->val == val)
151             printf("\n链表第%d节点有%d这个值\n",n, val);
152         p=p->pNext;
153     }
154     if(!n)
155         printf("未找到!!!\n");
156  }

 

posted @ 2017-05-06 23:28  Chaney丶  阅读(723)  评论(0)    收藏  举报