
/ *编写函数slnklistdelx(linklisthead,datatypex),以删除单头链表头中没有头的第一个值为x的节点. 并构造测试用例进行测试. * // ********************************** // //文件名: lab2_01.c * // * ************************************** /#include“ slnklist.h” / *请完成此功能,并测试* / linklistdelx(linklisthead,datatypex){linklistp = head,pre = NULL; //确保初始化pre = NULLwhile(p && p-> info!= X){pre = p; p = p-> next;} if(p){if(!pre){head = head-> next;} else {pre-> next = p-> next; free(p);}} returnhead;} intmain(){datatypex; linklisthead;头= creatbyqueue(); / *尾部插入方法创建一个单链表* / print(头); printf(“请输入要删除的值: ”); scanf(“%d”,&x); head = delx(head,x); / *删除单链列表的第一个节点* / print(头); delList(head); / *释放单链接列表空间* / return0;}

/ ********************************** // *文件名: lab2_02.c * // ************************************** // *假设一个线性表(a1,a2,a3,.. . an)使用没有前导节点的单链列表存储,请设计算法函数linklistreverse1(linklisthead)和voidreverse2(linklist * head)来反转没有前导节点就位的单链列表头,以便表变成(an,an- 1,... a3.a2,a1). 并构造测试用例进行测试. * /#include“ slnklist.h” / *请完成此功能并进行测试* / linklistreverse1(linklisthead){linklistp,q; p =头头= NULL; while(p)//核心{q = p-> next; p-> next = head;头= p; p = q;} returnhead;} voidvoidverse2(linklist * head)//如果没有返回值,则从指针{linklistp,q; p = *头; *头= NULL;而(p){q = p-> next; p-> next = * head; *头= p; p = q;}} intmain(){datatypex; linklisthead;头= creatbystack(); // *头插入方法创建单个链接列表* / print(头); //输出原始链表* / head = reverse1(head); / *倒单链表* /打印(头); / *输出倒排列表* / reverse2(&head); / *反转单链表* / print(头); delList(head); return0;}

/ *假定不带前导节点的单链列表的头按升序排列,请设计算法功能linklistinsert(linklisthead,datatypex),将值x的节点插入链表的头,并维护链表的顺序. 构造分别插入表标题,表和页脚中以进行测试的测试用例. * // ********************************** // *文件名: lab2_03.c * // * ************************************** /#include“ slnklist.h” / *请完成此功能,并测试* / linklistinsert(linklisthead,datatypex)(linklistpre,p,s; s =(链接列表)malloc(sizeof(node)); s-> info = x; p = head; pre = NULL; while(p && p-> infonext;} if(!pre)//在表头中插入{s-> next = head; head = s;}否则{//在表头或末尾插入pre-> next = s; s-> next = p;} returnhead;} intmain(){datatypex; linklisthead; printf(“以升序输入一组整数: \ n”); head = creatbyqueue(); / *尾部插入方法单独创建链表* /打印(头); printf(“请输入要插入的值: ”); scanf(“%d”,&x); head =插入(头,x); / *将输入的值插入单链列表的适当位置* / print(头); delList(头); return0;}

/ *编写算法函数linklistdelallx(linklisthead,intx),删除单链接列表开头的所有值为x的节点,且不带前导节点. * // ********************************** // *文件名: lab2_04.c * // * ************************************** /#include“ slnklist.h” / *请完成此功能,并测试* / linklistdelallx(linklisthead不带头结点的单链表,intx)(linklistp,t; while(head)//如果要删除第一个(if(head-> info == x)(p = head; head = head-> next; free(p); //回收p} else {break;}} if(head)//如果删除的不是第一个{p = head; while(p-> next){if(p-> next-> info == x){t = p-> next; p-> next = p-> next-> next; free(t);} else {p = p-> next;}}} returnhead;} intmain() {datatypex; linklisthead; head = creatbyqueue(); / *创建单链接列表的尾部插入方法* / print(head); printf(“请输入要删除的值: ”); scanf(“%d”, &x); head = delallx(head,x); print(head); delList(head); return0;}

slnklist.h
#include
本文地址:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-188095-1.html
美国是伊拉克战乱的始作俑者
早知道不更新了
和平时期