链表的增删查找

来源:互联网 发布:淘宝刷手会被坐牢吗 编辑:程序博客网 时间:2024/05/16 10:19
#include <stdio.h>#include<malloc.h>typedef struct Node{int val;struct Node * pNext;}Node,* pNode;pNode creat_list();void trevel_list(pNode);void sort_list(pNode);void insert_list(pNode,int,int);int length_list(pNode);int delete_list(pNode,int);void search_list(pNode,int);void main(){pNode pHead = creat_list();printf("输入后信息如下:\n");trevel_list(pHead);printf("\n排序之后如下:\n");sort_list(pHead);trevel_list(pHead);printf("\n链表长度位:\n");printf("%d",length_list(pHead));printf("\n删除第三个数字为:\n");printf("%d",delete_list(pHead,3));printf("\n删除之后如下:\n");trevel_list(pHead);printf("\n删除之后链表长度为:\n");printf("%d",length_list(pHead));printf("\n在第5个位置插入一个节点\n");insert_list(pHead,5,15);printf("\n插入之后如下:\n");trevel_list(pHead);search_list(pHead,15);}pNode creat_list(){pNode pHead,pTail,pNew;int len,i;scanf("%d",&len);pHead = (pNode)malloc(sizeof(Node));pTail = pHead;pTail->pNext = NULL;for (i = 0; i < len; i++){pNew = (pNode)malloc(sizeof(Node));scanf("%d",&pNew->val);pTail->pNext=pNew;pTail = pNew;pTail->pNext = NULL;}return pHead;}void trevel_list(pNode pHead){pNode t = pHead->pNext;while(t != NULL){printf("%d ",t->val);t = t->pNext;}}void sort_list(pNode pHead){pNode p,q;int i,j,temp,len;len=length_list(pHead);for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext){for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext){if(p->val > q->val){temp = p->val;p->val = q->val;q->val = temp;}}}}void insert_list(pNode pHead,int pos,int val){ pNode p,t; int len = length_list(pHead);  if(pos>len) printf("插入失败!!!\n");else {p = pHead->pNext;pos--;while(pos--){p = p->pNext;}t = (pNode)malloc(sizeof(Node));t->val = val;t->pNext = p->pNext;p->pNext = t;}}int delete_list(pNode pHead,int pos){int i,val,len;pNode t,p=pHead;len = length_list(pHead);if(pos>len)printf("删除失败!!!\n");else{pos--;while(pos--){p=p->pNext;}t = p->pNext;p->pNext = t->pNext;val = t->val;free(t); }return val;}int length_list(pNode pHead){int len = 0;pNode t = pHead->pNext;while(t != NULL){len++;t = t->pNext;}return len;}  void search_list(pNode pHead, int val) { pNode p = pHead->pNext; int n=0;while(p!=NULL){n++;if(p->val == val)printf("\n链表第%d节点有%d这个值\n",n, val);p=p->pNext;}if(!n)printf("未找到!!!\n"); }

0 0
原创粉丝点击