单链表的创建,查找,删除,插入。
2013-11-24 23:25
288 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//定义学生的结构体
typedef struct stu
{
int id;
char name[20];
struct stu * next;
}stu;
//该函数是创建学生信息
stu *Create_chain()
{
stu* head = NULL;
stu* p1 = NULL;
stu* p2 = NULL;
p1 = (stu*)malloc(1*sizeof(stu));
printf("please input a stu infor\n");
scanf("%d%s", &(p1->id), p1->name);
p2 = head = p1;
while(p1->id != 0)
{
p1 = (stu*)malloc(1*sizeof(stu));
printf("please input a stu infor\n");
scanf("%d%s", &(p1->id), p1->name);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
return head;
}
//该函数是打印学生信息
void Print_chain(stu * head)
{
stu *p;
p = head;
while(p->next != NULL)
{
printf("%-12d%-12s\n",p->id, p->name);
p = p->next;
}
}
//该函数是插入学生信息
void Insert_info(stu* head, stu* temp)
{
stu* p1 = NULL;
stu* p2 = NULL;
p1 = head;
if(head == NULL)
{
head = temp;
temp->next = NULL;
}
else
{
while((p1->next != NULL) && (p1->id<temp->id))
{
p2 = p1;
p1 = p1->next;
}
if(p1->id > temp->id)
{
p2->next = temp;
temp->next = p1;
}
if (p1->next == NULL)
{
p1->next = temp;
temp->next = NULL;
}
}
}
stu* Delete_info(stu* head, int id)
{
stu* p1 = NULL;
stu* p2 = NULL;
p1 = head;
if (head == NULL)
{
printf("not exist stu_info\n");
return head;
}
while((p1->next != NULL)&& (p1->id != id))
{
p2 = p1;
p1 = p1->next;
}
if (p1->id == id)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
}
else
{
printf("not find the stu\n ");
}
return head;
}
void Free_chain(stu* head)
{
stu *p;
p = head;
while(p->next != NULL)
{
free(p);
p = p->next;
}
}
int main()
{
int id ;
stu* head;
stu* tmp = (stu*)malloc(1*sizeof(stu));
head = Create_chain();
Print_chain(head);
puts("please input stu info\n");
scanf("%d%s", &tmp->id, tmp->name);
Insert_info(head, tmp);
Print_chain(head);
printf("please input the id you want delete\n");
scanf("%d\n", &id);
head = Delete_info(head, id);
Print_chain(head);
Free_chain(head);
return 0;
}
#include <string.h>
#include <stdlib.h>
//定义学生的结构体
typedef struct stu
{
int id;
char name[20];
struct stu * next;
}stu;
//该函数是创建学生信息
stu *Create_chain()
{
stu* head = NULL;
stu* p1 = NULL;
stu* p2 = NULL;
p1 = (stu*)malloc(1*sizeof(stu));
printf("please input a stu infor\n");
scanf("%d%s", &(p1->id), p1->name);
p2 = head = p1;
while(p1->id != 0)
{
p1 = (stu*)malloc(1*sizeof(stu));
printf("please input a stu infor\n");
scanf("%d%s", &(p1->id), p1->name);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
return head;
}
//该函数是打印学生信息
void Print_chain(stu * head)
{
stu *p;
p = head;
while(p->next != NULL)
{
printf("%-12d%-12s\n",p->id, p->name);
p = p->next;
}
}
//该函数是插入学生信息
void Insert_info(stu* head, stu* temp)
{
stu* p1 = NULL;
stu* p2 = NULL;
p1 = head;
if(head == NULL)
{
head = temp;
temp->next = NULL;
}
else
{
while((p1->next != NULL) && (p1->id<temp->id))
{
p2 = p1;
p1 = p1->next;
}
if(p1->id > temp->id)
{
p2->next = temp;
temp->next = p1;
}
if (p1->next == NULL)
{
p1->next = temp;
temp->next = NULL;
}
}
}
stu* Delete_info(stu* head, int id)
{
stu* p1 = NULL;
stu* p2 = NULL;
p1 = head;
if (head == NULL)
{
printf("not exist stu_info\n");
return head;
}
while((p1->next != NULL)&& (p1->id != id))
{
p2 = p1;
p1 = p1->next;
}
if (p1->id == id)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
}
else
{
printf("not find the stu\n ");
}
return head;
}
void Free_chain(stu* head)
{
stu *p;
p = head;
while(p->next != NULL)
{
free(p);
p = p->next;
}
}
int main()
{
int id ;
stu* head;
stu* tmp = (stu*)malloc(1*sizeof(stu));
head = Create_chain();
Print_chain(head);
puts("please input stu info\n");
scanf("%d%s", &tmp->id, tmp->name);
Insert_info(head, tmp);
Print_chain(head);
printf("please input the id you want delete\n");
scanf("%d\n", &id);
head = Delete_info(head, id);
Print_chain(head);
Free_chain(head);
return 0;
}
相关文章推荐
- 单链表的创建、遍历、插入、删除、查找、逆转
- 单链表的创建、插入,删除、查找等操作
- 单链表的创建+ 求表长+ 查找+插入+删除
- 单链表的创建(头插尾插),表长,输出,插入,删除,查找,逆置,分解长两个链表(奇数偶数链表),查找倒数第k个元素,产出相同元素
- C语言单链表的创建、插入、查找、删除、求长、排序、遍历
- 单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- 数据结构:头插法、尾插法创建单链表,求链表长度、查找、插入、删除、合并
- 单链表的创建、插入、删除、销毁以及查找中间结点
- 单链表的创建、插入、删除、查找
- C++单链表的动态创建,查找,遍历,删除,插入,添加,排序
- 单链表的创建,表长,插入,查找,逆置,中间元素,删除节点,打印
- 单链表-创建、插入、删除、查找、反转等操作
- C++实现单链表的创建、插入、删除、逆置操作
- 线性表的基本操作,包括:创建、插入、删除、查找等基本操作
- C++ 单链表操作 插入、删除、查找、排序、合并
- 单链表的创建、插入、删除等操作
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 单链表的建立,插入,显示,查找删除以及反转
- 单链表的创建、插入、删除、倒置操作