运行环境:Dev-C++

vs2013可能不能运行

首先新建一个头文件slnklist.h

#include <stdio.h>
#include <stdlib.h>
/**************************************/
/* 链表实现的头文件,文件名slnklist.h */
/**************************************/typedef int datatype;typedef struct link_node{datatype info;struct link_node *next;}node;
typedef node *linklist;/**********************************/
/*函数名称:creatbystack()              */
/*函数功能:头插法建立单链表            */
/**********************************/
linklist creatbystack()
{  linklist  head,s;datatype x;head=NULL;printf("请输入若干整数序列:\n");scanf("%d",&x);while (x!=0)        /*以0结束输入*/{   s=(linklist)malloc(sizeof(node));  /*生成待插入结点*/s->info=x;s->next=head;            /*将新结点插入到链表最前面*/head=s;scanf("%d",&x);}return head;                /*返回建立的单链表*/
}
/**********************************/
/*函数名称:creatbyqueue()              */
/*函数功能:尾插法建立单链表            */
/**********************************/
linklist creatbyqueue()
{linklist head,r,s;datatype x;head=r=NULL;printf("请输入若干整数序列:\n");scanf("%d",&x);while (x!=0) /*以0结束输入*/{    s=(linklist)malloc(sizeof(node));s->info=x;if (head==NULL)        /*将新结点插入到链表最后面*/head=s;elser->next=s;r=s;scanf("%d",&x);}if (r)  r->next=NULL;return head;                    /*返回建立的单链表*/
}
/**********************************/
/*函数名称:print()                      */
/*函数功能:输出不带头结点的单链表      */
/**********************************/
void print(linklist head)
{   linklist p;int i=0;p=head;printf("List is:\n");while(p){printf("%5d",p->info);p=p->next;i++;if (i%10==0) printf("\n");}printf("\n");
}
/**********************************/
/*函数名称:delList()                  */
/*函数功能:释放不带头结点的单链表      */
/**********************************/
void delList(linklist head)
{ linklist p=head;while (p){ head=p->next;free(p);p=head;}
}

1.编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。 并构造测试用例进行测试。

/*编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。
并构造测试用例进行测试。
*/
/**********************************/
/*文件名称:lab2_01.c             */
/**********************************/#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist delx(linklist head,datatype x)
{linklist p = head,pre=NULL;//一定要初始化pre=NULL while(p&&p->info!=x){pre = p;p = p->next;}if(p){if(!pre){head = head->next;}else {pre->next = p->next;free(p);}}return head;}int main()
{   datatype x;linklist head;head=creatbyqueue();        /*尾插入法建立单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);head=delx(head,x);            /*删除单链表的第一个值为x的结点*/print(head);delList(head);                /*释放单链表空间*/return 0;
}

2.假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储, 请设计算法函数linklist reverse1(linklist head)和 void reverse2(linklist *head)将不带头结点的单链表head就地倒置, 使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。

/**********************************/
/*文件名称:lab2_02.c                 */
/**********************************/
/*
假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储,
请设计算法函数linklist reverse1(linklist  head)和
void reverse2(linklist *head)将不带头结点的单链表head就地倒置,
使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
*/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist reverse1(linklist head)
{linklist p,q;p=head;head = NULL;while(p)  //核心{q = p->next;p->next = head;head=p;p=q;}return head;
}
void reverse2(linklist *head) //不返回值,那就从指针上下手
{linklist p,q;p=*head;*head = NULL;while(p){q = p->next;p->next = *head;*head=p;p=q;}
}int main()
{   datatype x;linklist head;head=creatbystack();        /*头插入法建立单链表*/print(head);                /*输出原链表*/head= reverse1(head);        /*倒置单链表*/print(head);                /*输出倒置后的链表*/reverse2(&head);            /*倒置单链表*/print(head);delList(head);return 0;
}

3.假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x), 将值为x的结点插入到链表head中,并保持链表有序性。 分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。

/*
假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),
将值为x的结点插入到链表head中,并保持链表有序性。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
*/
/**********************************/
/*文件名称:lab2_03.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist insert(linklist head ,datatype x)
{linklist pre,p,s;s = (linklist)malloc(sizeof(node));s->info = x;p = head;pre=NULL;while(p&&p->infonext; } if(!pre)  //插在表头 {s->next = head;head = s;}else{    //插在中间或者末尾 pre->next = s;   s->next = p;}return head;}
int main()
{   datatype x;linklist head;printf("输入一组升序排列的整数:\n");head=creatbyqueue();                /*尾插入法建立单链表*/print(head);printf("请输入要插入的值:");scanf("%d",&x);head=insert(head,x);                /*将输入的值插入到单链表适当位置*/print(head);delList(head);return 0;
}

4.编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。

/*
编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。
*/
/**********************************/
/*文件名称:lab2_04.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist delallx(linklist head,int x)
{linklist p,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;}}        }return head;
}
int main()
{   datatype x;linklist head;head=creatbyqueue();                /*尾插入法建立单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);head=delallx(head,x);print(head);delList(head);return 0;
}

【C语言】数据结构C语言版 实验2 不带头结点的单链表相关推荐

  1. [数据结构-严蔚敏版]P37定义一个带头结点的线性链表

    大家如果发现代码有错误,麻烦评论告知一下!!! 代码我已经发现存在部分错误,等有时间我再进行修正.目前存在错误:mergeList_L函数有问题! 代码如下: #include <iostrea ...

  2. 2.3 带头结点的单链表:理论+编程实战(C语言详细)

    1.顺序存储:线性表/栈/队列:理论+C语言实现–详细 2.1 链式存储概述 和 2.2 线性表的链式存储–单链表(C语言详细实现) 文章目录 2.3 带头结点的单链表 1. 带头结点的单链表基本概念 ...

  3. C语言实现不带头结点的单链表逆置的三种方法

    C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...

  4. C语言不带头结点的单链表

    C语言不带头结点的单链表 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>typedef st ...

  5. 不带头结点的单链表------C语言实现

    1 /****************************************************/ 3 File name:no_head_link.c4 Author:SimonKly ...

  6. 数据结构练习:运用单链表实现图书管理系统(c/c++)(内含带头结点的单链表的基本操作)

    数据结构练习:运用单链表实现图书管理系统 正文 注意 部分功能运行展示 所包含头文件及结构体的定义 自定义函数 主函数 完整代码 结束语 正文 本程序使用带头节点的单链表存储结构实现,共有六个基本功能 ...

  7. 不带头结点的单链表------C语言实现(带注释)

    #include <stdio.h> #include <stdlib.h> /*next 英文词的意思 是 "下一个". 链表里 用于 指向下一个节点的指 ...

  8. 【数据结构】带头结点的单链表

    文章目录 一.单链表的概念 二.结构体声明: 三.函数 1.购买节点 2.释放节点 3.单链表的初始化 4.判空函数 5.获取单链表有效值个数 6.按数据查询(返回含有此数据节点的前驱) 7.按数据查 ...

  9. 【C语言】数据结构C语言版 实验3 带头结点的单链表

    slnklist.h #include <stdio.h> #include <stdlib.h> /************************************* ...

最新文章

  1. php 菜谱 源码,基于php的菜谱大全api调用代码实例
  2. 【未来可能用到】关于模型的100个问答-part1
  3. 开源|如何开发一个高性能的redis cluster proxy?
  4. linux 进程管理 ppt,linux操作系统-进程管理和打印管理.ppt
  5. 七十九、TodoList示例 深入Redux的工作流
  6. Katy Perry - E.T.
  7. logstash 吞吐量优化_1002-谈谈ELK日志分析平台的性能优化理念
  8. 如何从字符串生成流?
  9. js案例:动态生成表格
  10. Matlab绘制直方图,横坐标间设置等间距的空格
  11. 基于JavaWeb的小区物业管理系统的设计与实现
  12. 【190222】VC++ 社区视频监控系统源代码
  13. Nginx Window假死状态
  14. 数论 —— 逆元与同余式定理
  15. UVM学习笔记(四)sequence与sequencer
  16. 源支付3.1版本全开源版+店员监控软件+手机监控APP源码
  17. 冬天到了,分享两款雪花特效代码
  18. 是不是顺子【C语言保姆级讲解】
  19. 关于WirelessKey的一些说明
  20. 高防服务器对ip有影响吗,高防服务器与高防IP的区别和联系

热门文章

  1. 视频跟踪——meanshift算法
  2. 《剑指Offer》 二进制中1的个数
  3. github—本地域名配置方式
  4. JVM——字符串常量池详解
  5. 枚举的定义与使用 1127 c#
  6. requests-发送post请求
  7. py第五天,列表的练习,每日菜谱
  8. jquery-样式的添加删除操作
  9. RT-Thread--线程管理
  10. Jenkins报错Error fetching remote repo 'origin'真正解决办法