/*
taotao Definition
Created by taotao man on 2015-9-30
brief: 实现一个单链表的建立、测长、打印,插入,排序,逆置
// 修改记录
date:
add SetA();
set GetA();
*/
#include "stdio.h"
#include<iostream>
#include <conio.h> // conio是Console Input/Output(控制台输入输出)的简写
using namespace std;
typedef struct student
{
int data;
struct student *next;
}node;
node *creat() // 单链表的建立
{
node *head, *s, *p;
head = (node *)malloc(sizeof(node));
p = head;
int cycle = 1, x;
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;
}
p->next = NULL;
head = head->next;
printf("\n第一个节点 %d", head->data);
return head;
}
int length(node *head)
{
int n = 0;
node *p = head;
while(p != NULL)
{
n++;
p = p->next;
}
printf("\n该链表的长度为: %d", n);
return n;
}
void print(node *head)
{
printf("打印该链表:");
int n = length(head);
node *p;
p = head;
while(p != NULL)
{
printf("\n %d", p->data);
p = p->next;
}
}
node *insert(node *head, int num) // 单链表的插入,num是要插入的数值(默认是递增顺序链表)
{
printf("\n在链表中插入数值:%d", 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(p1->data >= p0->data)
{
if(p1 == head)
{
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) // 单链表的排序
{
printf("单链表的排序:\n");
node *p, *p2, *p3;
int n = length(head), temp;
if(head == NULL || head->next == NULL)
return head;
p = 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) // 单链表的逆置
{
printf("\n单链表的逆置\n");
if(head == NULL || head->next == NULL)
return head;
node *p1, *p2, *p3;
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 main()
{
node *sjt = creat();
print(sjt);
node *sjt1 = insert(sjt, 3);
print(sjt1);
sort(sjt1); // 单链表的排序
print(sjt1);
//
node *sjt2 = reverse(sjt1);
print(sjt2);
system("pause");
}
实现一个单链表的建立、测长、打印,插入,排序,逆置
最新推荐文章于 2018-12-12 18:29:46 发布