链表的建立,输出,删除,插入运算的c语言实现
2011-08-20 20:16
861 查看
#include "Stdio.h"
#include "Conio.h"
#define NULL 0
#define TYPE struct stu
#define LEN sizeof(struct stu)
struct stu
{
int num;
int age;
struct stu *next;
};
/*构造链表*/
TYPE * creat(void)
{
struct stu *head,*pf,*pb;
int i,n;
printf("input number of node: ");
scanf("%d",&n);
pf=head=(TYPE *)malloc(LEN);
head->next=NULL;
for(i=0;i<n;i++)
{
pb=(TYPE *)malloc(LEN);
printf("input Number and Age\n");
scanf("%d%d",&pb->num,&pb->age);
if(pb->num<=0)
{ printf("input error,please retry");
i--;
}
else
{ pf->next=pb;
pb->next=NULL;
pf=pb;
}
}
return(head);
}
/*链表的删除节点*/
TYPE * delete(TYPE * head)
{
TYPE *pf,*pb;
int num;
if(head->next==NULL)
{ printf("\nempty list! cann't delete\n");
return head;
}
printf("Input the deleted number: ");
scanf("%d",&num);
pb=head;
while (pb->num!=num && pb->next!=NULL)
{
pf=pb;
pb=pb->next;
}
if(pb->num==num)
{ if(pb==head) head=pb->next;
else pf->next=pb->next;
printf("The node is deleted\n");
}
else
printf("The node not been found!\n");
return head;
}
/*链表插入节点*/
TYPE * insert(TYPE * head)
{
TYPE *pb ,*pf,*pi;
printf("Input the inserted number and age: ");
pi=(TYPE *)malloc(LEN);
scanf("%d%d",&pi->num,&pi->age);
pb=head->next;
if(head->next==NULL)
{ head->next=pi;
pi->next=NULL;
}
else
{
while((pi->num>pb->num)&&(pb->next!=NULL))
{ pf=pb;
pb=pb->next;
}
if(pi->num<=pb->num)
{
if(head->next==pb)
{ head->next=pi;
pi->next=pb;
}
else
{pf->next=pi;
pi->next=pb;
}
}
else
{ pb->next=pi;
pi->next=NULL;
}
}
return head;
}
/*链表的输出*/
void print(TYPE * head)
{TYPE *p=head->next;
if(p==NULL) printf("list enmpty\n");
else
{
printf("Number\t\tAge\n");
while(p!=NULL)
{
printf("%d\t\t%d\n",p->num,p->age);
p=p->next;
}
}
}
void main(void)
{
TYPE * head,*pnum;
int n,num;
head=creat();
print(head);
head=delete(head);
print(head);
head=insert(head);
print(head);
getch();
}
#include "Conio.h"
#define NULL 0
#define TYPE struct stu
#define LEN sizeof(struct stu)
struct stu
{
int num;
int age;
struct stu *next;
};
/*构造链表*/
TYPE * creat(void)
{
struct stu *head,*pf,*pb;
int i,n;
printf("input number of node: ");
scanf("%d",&n);
pf=head=(TYPE *)malloc(LEN);
head->next=NULL;
for(i=0;i<n;i++)
{
pb=(TYPE *)malloc(LEN);
printf("input Number and Age\n");
scanf("%d%d",&pb->num,&pb->age);
if(pb->num<=0)
{ printf("input error,please retry");
i--;
}
else
{ pf->next=pb;
pb->next=NULL;
pf=pb;
}
}
return(head);
}
/*链表的删除节点*/
TYPE * delete(TYPE * head)
{
TYPE *pf,*pb;
int num;
if(head->next==NULL)
{ printf("\nempty list! cann't delete\n");
return head;
}
printf("Input the deleted number: ");
scanf("%d",&num);
pb=head;
while (pb->num!=num && pb->next!=NULL)
{
pf=pb;
pb=pb->next;
}
if(pb->num==num)
{ if(pb==head) head=pb->next;
else pf->next=pb->next;
printf("The node is deleted\n");
}
else
printf("The node not been found!\n");
return head;
}
/*链表插入节点*/
TYPE * insert(TYPE * head)
{
TYPE *pb ,*pf,*pi;
printf("Input the inserted number and age: ");
pi=(TYPE *)malloc(LEN);
scanf("%d%d",&pi->num,&pi->age);
pb=head->next;
if(head->next==NULL)
{ head->next=pi;
pi->next=NULL;
}
else
{
while((pi->num>pb->num)&&(pb->next!=NULL))
{ pf=pb;
pb=pb->next;
}
if(pi->num<=pb->num)
{
if(head->next==pb)
{ head->next=pi;
pi->next=pb;
}
else
{pf->next=pi;
pi->next=pb;
}
}
else
{ pb->next=pi;
pi->next=NULL;
}
}
return head;
}
/*链表的输出*/
void print(TYPE * head)
{TYPE *p=head->next;
if(p==NULL) printf("list enmpty\n");
else
{
printf("Number\t\tAge\n");
while(p!=NULL)
{
printf("%d\t\t%d\n",p->num,p->age);
p=p->next;
}
}
}
void main(void)
{
TYPE * head,*pnum;
int n,num;
head=creat();
print(head);
head=delete(head);
print(head);
head=insert(head);
print(head);
getch();
}
相关文章推荐
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- [原]C语言实现双向链表删除节点、插入节点、双向输出等操作
- C语言实现双向链表删除、插入、双向输出
- C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
- 【碎片知识(2)· C语言】链表的建立、输出、特定点的删除和插入以及malloc函数的应用
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言:动态链表的建立,查找,删除,插入功能的实现
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- c++链表 建立 输入 输出 删除结点 插入结点 释放链表 的函数
- [转载]C语言链表的建立、插入和删除
- 【C语言】 链表 单链的建立,节点增加 删除 顺序插入
- 链表建立输出删除插入的综合实例
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- C语言——链表部分(包括节点的建立、总长度、显示链表、插入节点以及删除节点)
- C语言链表的建立、插入和删除
- C语言实现链表的插入、删除、查询操作