单链表基本操作
来源:互联网 发布:淘宝上怎么改差评 编辑:程序博客网 时间:2024/06/07 06:48
#include <cstdlib>#include <iostream>#include <string.h>#include <conio.h>#include <stdio.h>/*c++实现简单的单链表操作*/using namespace std;typedef struct student{ int data; struct student *next;}node;//建立单链表 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;}//单链表插入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 =0; } else { p2->next=p0; p0->next=p1; } } else { p1->next=p0; p0->next=NULL; } return head;} //单链表测长int length(node *head){ int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return n;} //单链表删除某个元素 node *delNode(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; } else printf("\n%d could not been found!",num); return head; }//单链表逆 node *reverse(node *head){ node *p1,*p2,*p3; if(head==NULL||head->next==NULL) return head; p1=head,p2=head->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1; return head;}//打印单链表void print(node *head){ node *p; int n; n=length(head); printf("\nNow,These %d record are:\n",n); p=head; if(head!=NULL) while(p!=NULL) { printf("\n uuu %d ",p->data); p=p->next; }} int main(int argc, char *argv[]){ node *list=creat(); print(list); list = delNode(list,2); print(list); int x; cin>>x; list=insert(list,x); print(list); list=reverse(list); print(list); system("PAUSE"); return EXIT_SUCCESS;}