链表操作--创建--删除--插入--打印
来源:互联网 发布:丝路英雄冒险最新数据 编辑:程序博客网 时间:2024/05/11 22:19
//链表的综合操作!!!
#include
#include
struct student * creat(void);
void print(struct student *head);
struct student * del(struct student * head ,long num);
struct student * insert(struct student *head,struct student *stud);
int n;
struct student
{
long num;
float score;
struct student * next;
};
int main()
{
struct student * head,stu;
long del_num;
printf("input records:/n");
head = creat(); //建立链表,返回指针
print(head); //输出全部结点
printf("/ninput the deleted number:");
scanf("%ld",&del_num); //输入要删除的结点的学号
head=del(head,del_num); //删除后链表的头地址
print(head);
printf("/ninput the inserted record:"); //输入要插入的结点
scanf("%ld %f",&stu.num,&stu.score);
head = insert(head,&stu); //插入一个结点,返回头结点地址
print(head); //输出全部结点
}
struct student * creat(void)
{
struct student *head;
struct student *p1,*p2;
n=0;
printf("输入格式为/"学号/"+空格+/"成绩/"/n");
p1=p2=(struct student *) malloc(sizeof(struct student));//开辟一个新单元
scanf("%ld %f",&p1->num,&p1->score);
head = NULL;
while(p1->num != 0)
{
n = n+1;
if( n == 1) head = p1;
else p2->next=p1;
p2 = p1;
p1=(struct student *)malloc(sizeof(struct student));
scanf("%ld %f",&p1->num,&p1->score);
}
p2->next = NULL;
return(head);
}
struct student * del(struct student * head ,long num)
{
struct student *p1,*p2;
if(head == NULL) {printf("/nlist null!/n"); return head;}
else
{ p1=head;
while(num != p1->num && p1->next != NULL) //p1指向的不是要找的结点,并且后面还有结点
{p2=p1;p1=p1->next;} //p1后移一个结点
if(num == p1->num) //找到了
{
if(p1 == head) head =p1->next; //若p1指向的是首结点,把第二个结点地址赋予head
else p2->next = p1->next; //否则将下一结点地址赋给前一结点地址
printf("delete :%ld/n",num);
n=n-1;
}
else printf("%ld not been found !/n",num); //找不到该结点
return(head);
}
}
struct student * insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2;
p1 = head;
p0 = stud;
if(head == NULL)
{head = p0; p0->next = NULL;}
else
{
while((p0->num > p1->num)&&(p1->next != NULL))//如果比这个大,那就继续向下寻找。。。
{
p2 = p1;
p1 = p1->next;
}
if(p0->num <= p1->num)
{
if(head == p1) head = p0; //插入到原来的第一个结点之前
else p2->next = p0; //插入到p2指向的结点之后
p0->next = p1;
}
else{p1->next = p0;p0->next=NULL;}
}
n=n+1;
return(head);
}
void print(struct student *head)
{
struct student * p;
printf("/nNow,These %d records are:/n",n);
p=head;
if(head != NULL)
do
{printf("%ld %5.1f/n",p->num,p->score);
p=p->next;
}while(p != NULL);
}
- 链表操作--创建--删除--插入--打印
- 链表操作--创建--删除--插入--打印
- CPtrList操作--插入,删除特定元素,删除全部
- CPtrList操作--插入,删除特定元素,删除全部
- C语言各种链表操作(创建、打印、删除、插入、反转)
- 链表操作综合练习(创建、拆分、插入、删除、合并、打印、逆置)
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 链表的创建、插入、删除操作
- 链表的创建、插入、删除操作
- 链表的创建,删除,插入,逆序,打印
- 双向链表(创建、求长、打印、删除、插入)
- 链表的创建,插入,删除和打印
- c++ 实现链表的创建,查询,打印,删除,插入
- 链表基本操作(建立、修改,插入、删除、打印)
- C++单链表的操作(创建,删除,打印,遍历,插入)
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- java语言编写链表的基本操作(链表的创建,插入,删除,打印,排序)
- POI操作Excel文档-插入图片
- 安装虚拟机时无法用键盘的处理方法
- Yast中软件管理突然无法打开
- Jquery ajax参数设置
- 改用VirualBox啦,嘿嘿……
- 局部变量、全局变量、堆、堆栈、静态和全局
- 链表操作--创建--删除--插入--打印
- 意外的收获:printf的打印顺序!!!
- tomcat的内存优化及自启动
- MFC疑难注解:CAsyncSocket及CSocket
- typedef结合结构做的洗牌发牌
- Cassandra的集群搭建
- 一个“开关”技巧
- 网络自动安装centos{dhcp+pxe+tftp+http)
- 执行CreateObject("Scripting.FileSystemObject")代码遇到"Operation is disallowed in this session"问题