单链表各种操作

来源:互联网 发布:简单的图像分割算法 编辑:程序博客网 时间:2024/06/16 10:51

终于自己写出了关于单链表的操作,而不是看别人的,现在编程越来越有感觉了,自己编更好,别人的还看不懂,不知道他们的思路是什么

单链表的建立,插入,删除,排序,求长度。插入是按大小顺序插入的。

 

#include <stdio.h>#include <stdlib.h>struct node{int data;node * next;};void creat(node * );void print(node * );int length(node *);void insert(node *, int );void del(node *, int);void sort(node *,int);void main(){node * head;int val=0;int lengt=0;head =(node *)malloc(sizeof(node));creat(head);printf("输入的数据为\n");print(head);printf("%链表长度为:");lengt=length(head);printf("%d\n",lengt);    sort(head,lengt);printf("排序后打印结果\n");print(head);printf("输入插入的数字");scanf("%d",&val);printf("val=%d\n",val);insert(head,val);printf("插入后打印结果\n");print(head);printf("输入删除的数字");scanf("%d",&val);del(head,val);printf("删除后打印结果\n");print(head);}void creat (node * head){  node * a=(node*) malloc(sizeof(node));  head->next=a;  printf("输入数字, 数字0结束\n");  scanf("%d",&a->data);  if(a->data==0)  {   a->next=NULL;   return ;  }  creat(a);}void sort(node* a,int len)   //交换数据,而不是指针{node *p,*q;int temp;for(int i=0;i<len;i++){ p=a;    q=p->next;while(q->next->data!=0)  {if (p->next->data>q->next->data){temp=p->next->data;p->next->data=q->next->data;      q->next->data=temp;}p=p->next;q=q->next;  }   }}void insert(node * a, int val)   //  按大小顺序插入{   node * p;   p=a;     node * b= (node *) malloc(sizeof(node));   while (p->next->data<val&& p->next->data!=0)   p=p->next;   b->next=p->next;   p->next=b;   b->data =val;}void del(node * a, int val){  node * p;  p=a;  while (p->next->data!=val)  {  if(p->next->data==0)  {  printf("没有找到此数\n");  return;  }  p=p->next;   }  p->next=p->next->next;  }void print(node* a){while (a->next!=NULL){a=a->next;if(a->next!=NULL)printf("%d->",a->data);}printf("\n");}int length(node * a){   int n=0;   while(a->next!=NULL)   {   a=a->next;   n++;   }   n=n-1;   return n;}


 

对于其他的数据结构就是struct的结果不同吧

原创粉丝点击