您的位置:首页 > 其它

单链表的基本操作

2014-09-01 22:09 429 查看
#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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: