单链表、双链表、队列、栈C实现

来源:互联网 发布:随便软件 编辑:程序博客网 时间:2024/05/24 03:07

单链表 建立/ 测长/ 打印/ 删除节点/ 排序/逆置

#include <stdio.h>#include <string.h>#include <conio.h>typedef struct student{   int data;   struct student *next;}//单链表建立node *creat(){   node *head,*p,*s;   int x,cycle = 1;   head = (node *)malloc(sizeof(node));   p = head;   while(cycle)   {      printf("\nplease input the data:");  scanf("%d",&x);  if(x!=0)  {    s = (node *)malloc(sizeof(node));s->data = x;printf("\n%d",s->data);p->next = s;p = s;  }  else cycle = 0;   }   head = head->next;   p->next = NULL;   printf("\n yyy %d",head->data);   return (head);}//单链表测长int length(node *head){   int n = 0;   node *p;   p = head;   while(p!=NULL)   {     p = p->next; n++;   }   return n;}//单链表打印void print(node *head){   node *p;int n;   n = length(head);   printf("\nnow,these %d records are :\n",n);   p = head;   if(head != NULL)   while(p!=NULL)   {     printf("\n uuu %d",p->data); p = p->next;   }}//删除结点node *del(node *head,int num){  node *p1,*p2;  p1 = head;  while(num!=p1->data&&p1->next!=NULL)  {    p2 = p1;p1 = p1->next;  }  if(num == p1->data)  {    if(p1 == head){  head = p1->next;  free(p1);    }elsep2->next = p1->next;  }  else   printf("\n %d could not been found",num);  return head;}//单链表插入node *insert(node *head,int num){  node *p0,*p1,*p2;  p1 = head;  p0 = (node *)malloc(sizeof(node));  p0->data = num;  while(p0->data>p1->data && p1->next != NULL)  {    p2 = p1;p1 = p1->next;  }  if(p0->data <= p1->data)  {    if(head == p1){  p0->next - p1;  head = p0;}else {  p2->next = p0;  p0->next = p1;}  }  else   {    p1->next = p0;p0->next = NULL;  }  return (head);}//单链表逆置node *reverse(node *head){  node *p1,*p2,*p3;  if(head == NULL || head->next == NULL)  return head;  p1 = head, p2 = p1->head;  while(p2)  {    p3 = p2->next;p2->next = p1;p1 = p2;p2 = p3;  }  head->next = NULL;  head = p1;  return head;}


原创粉丝点击