单链表的创建、插入、删除、倒置操作
2009-12-02 20:40
387 查看
/*---------------------------------------------------*/
/*--------------单链表的创建、插入、删除、倒置操作-----------*/
/*--------------Written by redfire250-----2005.5.10----*/
/*-----------------------------------------------------*/
#include<malloc.h>
#include<stdio.h>
#define null 0
struct student
{
long Number;
char Name[20];
long Score;
struct student *Next;
};
int n=0;/*n为全局变量,用来计算链表的结点个数*/
/*-----------------------------------------*/
/*--------------创建结点函数Creat()--------*/
/*-----------------------------------------*/
struct student *Creat()
{
struct student *p1;
struct student *p2;
struct student *head=null;
p1=p2=(struct student *)malloc(sizeof(struct student));/*开辟一段可用内存单元*/
printf("please input the student's Number Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
while(p2->Number!=0)
{
n++;
if(n==1) /*是否开辟的是第一个结点*/
head=p2;
else
p1->Next=p2;
p1=p2;
p2=(struct student *)malloc(sizeof(struct student));
printf("Input the Number the Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
}
p1->Next=null;
return(head);
}
/*------------------------------------------*/
/*--------------查看链表内容函数View()------*/
/*------------------------------------------*/
View(struct student *head)
{
struct student *p;
p=head;
while(p->Next!=null)
{
printf("%ld %s %ld\n",p->Number,p->Name,p->Score);
p=p->Next;
}
printf("%ld %s %ld\n",p->Number,p->Name,p->Score);
}
/*-------------------------------------------------*/
/*--------------插入结点函数(前插)Insert()-------*/
/*-------------------------------------------------*/
Insert(struct student *head,int Num) /*head为链表头指针,Num插入链表位置*/
{
int t=1;
struct student *p1,*p2;
p1=head;
if (Num>n||Num<0)
{
printf("input error!!!\n");
return 0;
}
while(t<Num-1) /*找到要插入结点的前一个结点*/
{
p1=p1->Next;
t++;
}
p2=(struct student *)malloc(sizeof(struct student));
printf("Input the Number the Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
p2->Next=p1->Next;
p1->Next=p2;
n++;
}
/*------------------------------------------*/
/*------------ 删除结点函数Delnode()--------*/
/*-----------------------------------------*/
Delnode(struct student *head,int node)
{
int t=1;
struct student *p1,*p2;
p2=head;
if (node>n||node<1)
{
printf("error!!! The node is not exist!");
return 0;
}
while(t<node-1) /*找到要删除结点的前一个结点*/
{
p2=p2->Next;
t++;
}
p1=p2->Next->Next; /*找到要删除结点的后一个结点*/
free(p2->Next); /*释放要删除的结点空间(删除)*/
p2->Next=p1; /*前一结点指向后一结点*/
n--;
}
/*-------------------------------------------------*/
/*--------------逆序重组链表Invert()-------*/
/*-------------------------------------------------*/
struct student *Invert(struct student *head)
{
struct student *p1,*p2;
p1=head;
p2=p1->Next;
head=p2->Next;
p1->Next=null;
while(head->Next!=null)
{
p2->Next=p1;
p1=p2;
p2=head;
head=head->Next;
}
head->Next=p2;
p2->Next=p1;
return head;
}
main()
{
int number1,number2;
struct student *head;
head=Creat();
View(head);
printf("the n that you want to insert:\n");
scanf("%d",&number1);
Insert(head,number1);
View(head);
printf("the node that you want to DELETE:\n");
scanf("%d",&number2);
Delnode(head,number2);
View(head);
printf("Inverte the list:\n");
View(Invert(head));
getch();
}
/*--------------单链表的创建、插入、删除、倒置操作-----------*/
/*--------------Written by redfire250-----2005.5.10----*/
/*-----------------------------------------------------*/
#include<malloc.h>
#include<stdio.h>
#define null 0
struct student
{
long Number;
char Name[20];
long Score;
struct student *Next;
};
int n=0;/*n为全局变量,用来计算链表的结点个数*/
/*-----------------------------------------*/
/*--------------创建结点函数Creat()--------*/
/*-----------------------------------------*/
struct student *Creat()
{
struct student *p1;
struct student *p2;
struct student *head=null;
p1=p2=(struct student *)malloc(sizeof(struct student));/*开辟一段可用内存单元*/
printf("please input the student's Number Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
while(p2->Number!=0)
{
n++;
if(n==1) /*是否开辟的是第一个结点*/
head=p2;
else
p1->Next=p2;
p1=p2;
p2=(struct student *)malloc(sizeof(struct student));
printf("Input the Number the Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
}
p1->Next=null;
return(head);
}
/*------------------------------------------*/
/*--------------查看链表内容函数View()------*/
/*------------------------------------------*/
View(struct student *head)
{
struct student *p;
p=head;
while(p->Next!=null)
{
printf("%ld %s %ld\n",p->Number,p->Name,p->Score);
p=p->Next;
}
printf("%ld %s %ld\n",p->Number,p->Name,p->Score);
}
/*-------------------------------------------------*/
/*--------------插入结点函数(前插)Insert()-------*/
/*-------------------------------------------------*/
Insert(struct student *head,int Num) /*head为链表头指针,Num插入链表位置*/
{
int t=1;
struct student *p1,*p2;
p1=head;
if (Num>n||Num<0)
{
printf("input error!!!\n");
return 0;
}
while(t<Num-1) /*找到要插入结点的前一个结点*/
{
p1=p1->Next;
t++;
}
p2=(struct student *)malloc(sizeof(struct student));
printf("Input the Number the Name and the Score:\n");
scanf("%ld%s%ld",&p2->Number,p2->Name,&p2->Score);
p2->Next=p1->Next;
p1->Next=p2;
n++;
}
/*------------------------------------------*/
/*------------ 删除结点函数Delnode()--------*/
/*-----------------------------------------*/
Delnode(struct student *head,int node)
{
int t=1;
struct student *p1,*p2;
p2=head;
if (node>n||node<1)
{
printf("error!!! The node is not exist!");
return 0;
}
while(t<node-1) /*找到要删除结点的前一个结点*/
{
p2=p2->Next;
t++;
}
p1=p2->Next->Next; /*找到要删除结点的后一个结点*/
free(p2->Next); /*释放要删除的结点空间(删除)*/
p2->Next=p1; /*前一结点指向后一结点*/
n--;
}
/*-------------------------------------------------*/
/*--------------逆序重组链表Invert()-------*/
/*-------------------------------------------------*/
struct student *Invert(struct student *head)
{
struct student *p1,*p2;
p1=head;
p2=p1->Next;
head=p2->Next;
p1->Next=null;
while(head->Next!=null)
{
p2->Next=p1;
p1=p2;
p2=head;
head=head->Next;
}
head->Next=p2;
p2->Next=p1;
return head;
}
main()
{
int number1,number2;
struct student *head;
head=Creat();
View(head);
printf("the n that you want to insert:\n");
scanf("%d",&number1);
Insert(head,number1);
View(head);
printf("the node that you want to DELETE:\n");
scanf("%d",&number2);
Delnode(head,number2);
View(head);
printf("Inverte the list:\n");
View(Invert(head));
getch();
}
相关文章推荐
- 单链表的创建、插入、删除、倒置操作
- c 单链表的创建、插入、删除、倒置操作
- 单链表的创建、插入、删除、倒置操作
- 单链表的创建、插入、删除、倒置操作
- 单链表的创建、插入、删除、倒置操作
- 单链表的创建,插入,删除等操作——精简版
- C++单链表的创建插入删除以及逆序操作
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 单链表的基本操作(创建、插入、删除......)
- 数据结构之 单链表的基本操作(创建、取值、插入、删除)
- C++实现单链表的创建、插入、删除、逆置操作
- 单链表的创建、计数打印、删除与插入操作
- 单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
- 数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作
- 单链表的创建、插入删除等操作
- 单链表创建-遍历-排序-插入-删除-逆序操作
- 单链表操作,创建,遍历,插入,删除,排序等操作
- 单链表的创建、插入、删除等操作
- 单链表的创建、插入,删除、查找等操作
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等