当前位置: 首页> 房产> 建材 > 单链表的插入及销毁

单链表的插入及销毁

时间:2025/7/11 1:16:49来源:https://blog.csdn.net/2302_80325489/article/details/139784680 浏览次数:0次

分数 5

作者 李卫明

单位 杭州电子科技大学

1.1编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁。程序不可存在内存泄漏。

输入格式:

若干整数。

输出格式:

每行显示一个链表,元素间用分隔符->分隔;共两行

输入样例:

100 2 3 -2 -8 -6 -9 -10 50 2 -1

输出样例:

2->2->3->50->100
-10->-9->-8->-6->-2->-1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

C程序如下:

#include<stdio.h>  
#include<stdlib.h>  typedef struct LinkList {  //定义数据结构int Data;  struct LinkList *Next;  
} LinkList, *List;  List  CreatHead();//创建头指针
void Sort(List L);//单链表排序
void Display(List L);//输出单链表
void Destroy(List L);//销毁单链表
void Reverse(List L);int main() {List firstHead, firstTail,secondHead,secondTail;firstHead = CreatHead();firstTail = firstHead;secondHead = CreatHead();secondTail = secondHead;int v;while (scanf("%d", &v) != EOF) {//给单链表添加新结点if (v > 0) {//大于0的添加到一个正数链表中List L = CreatHead();//创建一个新结点L->Data = v;//将v的值赋给L的DatafirstTail->Next = L;//让正数链表的尾巴指针的Next域指向新结点firstTail = L;//尾指针指向新结点}else {//小于0的添加到另外一个负数链表中List L = CreatHead();L->Data = v;secondTail->Next = L;secondTail = L;}}Sort(firstHead);//单链表排序Sort(secondHead);Display(firstHead);//输出单链表Display(secondHead);Destroy(firstHead);//销毁单链表Destroy(secondHead);
}List CreatHead() {  List p = (List)malloc(sizeof(LinkList));  //向内存申请一片空间if (p == NULL) {  exit(EXIT_FAILURE); // 分配失败时退出  }  p->Next = NULL;  //新结点的Next域指向NULLreturn p;  //返回p指针所指向的内存地址
}  void Display(List L) {List p = L->Next;  //定义一个p指针指向单链表的第一有效结点while (p) {  //如果单链表不为空printf("%d", p->Data);  //输出该结点的数据域p = p->Next;  //p指针沿着链表继续向后指if (p) printf("->");  //如果该节点不为空则输出”->“}  //根据题目要求元素间用分隔符”->“分隔printf("\n");  //最后输出换行符
}void Destroy(List L) {  List p = L;  //定义一个p指针指向该单链表while (p->Next) {  //如果p的Next域不为空,即下一个结点存在List q = p->Next;  //定义一个新的指针q指向需要删除的结点p->Next = q->Next;  //让头结点与需要删除结点的下一个结点链接free(q);  //释放需要删除结点的内存}  free(p);  //最后删除头结点
}  void Sort(List L) {//选择排序List pStar, pcur,pMin;//定义三个List型指针变量pStar = L->Next;//pStar用于指向每次外循环的第一个结点int temp;//定义一个零时变量,用于交换Data,注意单链表的排序改变链表顺序,只交换数据域for (;pStar != NULL;pStar = pStar->Next) {//外循环,遍历整个单链表pMin = pStar;//假设链表中最小的值就是pStarfor (pcur = pMin->Next;pcur != NULL; pcur = pcur->Next) {//内循环,在篇Star后结点中找最小的数据if (pcur->Data < pMin->Data) {//如果后面结点的数据比pMin小,则将其赋值给pMinpMin = pcur;}}if (pStar != pMin) {//交换两结点的数据域temp = pMin->Data;pMin->Data = pStar->Data;pStar->Data = temp;}//如果pMin的地址与pStar的相等则不需要进行交换}
}
关键字:单链表的插入及销毁

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: