单链表的基本操作

来源:互联网 发布:西门子840d编程指令 编辑:程序博客网 时间:2024/05/17 21:07
#include <iostream>#include <stdio.h>#include <string.h>#include <conio.h>using namespace std;typedef struct Node{    int data;    struct Node *next;}node;//创建单链表node *create(){    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;print("\n %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 %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);}else{p2->next = p1->next;free(p1);}}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 *sort(node *head){node *p,*p2,*p3;int n;int temp;n = length(head);if(head == NULL || head->next == NULL)return head;for(int j =1;j<n;++j){p = head;for(int i = 0;i<n-j;++i){if(p->data>p->next->data){temp = p->data;p->data = p->next->data;p->next->data =temp;}p = p->next;}}return head;}
//单链表的逆置node *reverse(node *head){node *p1.*p2.*p3;if(head == NULL || head->next == NULL)return head;p1= head,p2 = p1->next;while(p2){p3 = p2->next;p2->next = p1;p1 = p2;p2 = p3;}head->next = NULL;head = p1;return head;}
//删除单链表的头元素void removeHead(node* head){node *p;p = head->next;head->next = p->next;free(p);}
//不知道节点N的值,遍历一次得到中间节点void searchmid(node* head,node* mid){node *temp = head;while(head->next->next != NULL){head = head->next->next;temp = temp->next;mid = temp;}}

0 0
原创粉丝点击