程序要求

1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。
3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。
输入和输出的格式

1.顺序线性表的建立、插入及删除

顺序表

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. #define ListSize 50
  5. typedef int DataType;
  6.  
  7. //线性表的顺序存储方式
  8. typedef struct {
  9. DataType data[ListSize];
  10. int l;
  11. }SeqList;
  12.  
  13. //创建顺序线性表
  14. void CreateList(SeqList *A,int n)
  15. {
  16. int i;
  17. for(i=;i<n;i++)
  18. {
  19. scanf("%d",&(A->data[i]));
  20. }
  21. A->l=n;
  22. }
  23.  
  24. //在顺序线性表中插入某个元素
  25. void InsertList(SeqList *A,DataType x,int i)
  26. {
  27. int j;
  28. if(i< || i>A->l) //插入时的条件
  29. {
  30. printf("插入位置错误!\n");
  31. exit();
  32. }
  33. else
  34. {
  35. printf("插入成功!\n");
  36. }
  37. if(A->l >= ListSize)
  38. {
  39. printf("列表溢出!\n");
  40. exit();
  41. }
  42. for(j=A->l-;j>=i-;j--)
  43. {
  44. A->data[j+]=A->data[j]; //插入时,把各个元素向后移动后,然后在进行插入
  45. }
  46. A->data[i-]=x;
  47. A->l++;
  48. }
  49.  
  50. //在顺序线性表中删除某个元素
  51. void DeleteList(SeqList *A,int i)
  52. {
  53. int j;
  54. if(A->l==) //删除时的条件
  55. {
  56. printf("列表为空!\n");
  57. exit();
  58. }
  59. if(i< || i>A->l)
  60. {
  61. printf("删除位置错误!\n\n");
  62. exit();
  63. }
  64. for(j=i;j<=A->l-;j++) //删除时,把各个元素向前移动,覆盖掉要删除的元素
  65. {
  66. A->data[j-]=A->data[j];
  67. }
  68. A->l--;
  69. }
  70.  
  71. //输出线性表
  72. void DisList(SeqList *L)
  73. {
  74. int i;
  75. for(i=;i<L->l;i++)
  76. printf("%d ",L->data[i]);
  77. printf("\n");
  78. }
  79.  
  80. void main()
  81. {
  82. SeqList *A=(SeqList*)malloc(sizeof(SeqList));
  83. int a=;
  84. printf("请输入7个整型元素:\n");
  85. CreateList(A,a);
  86. printf("输出SeqList的长度: \n");
  87. printf("长度=%d\n",A->l);
  88. printf("表内元素为");
  89. DisList(A);
  90. DataType x;
  91. printf("请输入需要插入的元素的位置!\n");
  92. int i;
  93. scanf("%d",&i);
  94. printf("请输入需要插入的元素!\n");
  95. scanf("%d",&x);
  96. InsertList(A,x,i);
  97. printf("长度=%d\n",A->l);
  98. printf("表内元素为");
  99. DisList(A);
  100. printf("请输入需要删除的元素的位置!\n");
  101. scanf("%d",&i);
  102. DeleteList(A,i);
  103. printf("表内元素为");
  104. DisList(A);
  105. printf("长度=%d\n",A->l);
  106. }

输入和输出的格式
顺序表输入输出:定义输入7个整型元素,回车进行插入和删除,输出线性表

2.链式线性表的建立、插入及删除

单链表

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef int ElemType;
  5.  
  6. //定义结点类型
  7. typedef struct Node
  8. {
  9. ElemType data; //单链表中的数据域
  10. struct Node *next; //单链表的指针域
  11. }Node,*LinkedList;
  12.  
  13. //单链表的初始化
  14. LinkedList LinkedListInit()
  15. {
  16. Node *A;
  17. A = (Node *)malloc(sizeof(Node)); //申请结点空间
  18. if(A == NULL) //判断是否有足够的内存空间
  19. printf("申请内存空间失败\n");
  20. A->next = NULL; //将next设置为NULL,初始长度为0的单链表
  21. return A;
  22. }
  23.  
  24. //单链表的建立
  25. LinkedList LinkedListCreat()
  26. {
  27. Node *A;
  28. A = (Node *)malloc(sizeof(Node)); //申请头结点空间
  29. A->next = NULL; //初始化一个空链表
  30. Node *r;
  31. r = A;
  32. ElemType x;
  33. while(scanf("%d",&x) != EOF)
  34. {
  35. Node *p;
  36. p = (Node *)malloc(sizeof(Node));
  37. p->data = x;
  38. r->next = p;
  39. r = p;
  40. }
  41. r->next = NULL;
  42. return A;
  43. }
  44.  
  45. //单链表的插入,在链表的第i个位置插入x的元素
  46. LinkedList LinkedListInsert(LinkedList A,int i,ElemType x)
  47. {
  48. Node *pre; //pre为前驱结点
  49. pre = A;
  50. int tempi = ;
  51. for (tempi = ; tempi < i; tempi++)
  52. pre = pre->next; //查找第i个位置的前驱结点
  53. Node *p; //插入的结点为p
  54. p = (Node *)malloc(sizeof(Node));
  55. p->data = x;
  56. p->next = pre->next;
  57. pre->next = p;
  58. return A;
  59. }
  60.  
  61. //单链表的删除,在链表中删除数据值为x的元素
  62. LinkedList LinkedListDelete(LinkedList A,ElemType x)
  63. {
  64. Node *p,*pre; //pre为前驱结点,p为查找的结点。
  65. p = A->next;
  66. while(p->data != x) //查找值为x的元素
  67. {
  68. pre = p;
  69. p = p->next;
  70. }
  71. pre->next = p->next; //删除操作,将其前驱next指向其后继。
  72. free(p);
  73. return A;
  74. }
  75.  
  76. int main()
  77. {
  78. LinkedList list,start;
  79. printf("请输入需要添加单链表的数据:");
  80. list = LinkedListCreat();
  81. for(start = list->next; start != NULL; start = start->next)
  82. printf("%d ",start->data);
  83. printf("\n");
  84.  
  85. int i;
  86. ElemType x;
  87. printf("请输入需要插入数据的位置:");
  88. scanf("%d",&i);
  89. printf("请输入需要插入数据的值:");
  90. scanf("%d",&x);
  91. LinkedListInsert(list,i,x);
  92. for(start = list->next; start != NULL; start = start->next)
  93. printf("%d ",start->data);
  94. printf("\n");
  95. printf("请输入需要删除的数据的值:");
  96. scanf("%d",&x);
  97. LinkedListDelete(list,x);
  98. for(start = list->next; start != NULL; start = start->next)
  99. printf("%d ",start->data);
  100. printf("\n");
  101. return ;
  102. }

输入和输出的格式
单链表输入输出:本程序可以输入多个整型数据元素
请输入第一个整数,回车输入下一个数
请输入第二个整数......最后输入Ctrl+z结束输入,进行插入和删除,最后输出单链表

C语言——线性表及其应用的更多相关文章

  1. C语言 线性表 双向链式结构 实现

    一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...

  2. C语言 线性表 链式表结构 实现

    一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...

  3. C语言 线性表 顺序表结构 实现

    一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...

  4. c语言线性表

    #include<stdio.h> #include<time.h> #include<stdlib.h> #define MAXSIZE 20 //初始长度 ty ...

  5. C语言--线性表

    #include<stdio.h>#include<stdlib.h>#include<string.h>#define LIST_SIZE 100#define ...

  6. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  7. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  8. 线性表之顺序存储结构(C语言动态数组实现)

    线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...

  9. 数据结构-线性表的链式存储相关算法(C语言实现)

    链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...

随机推荐

  1. WebMagic 实现爬虫入门教程

    本示例实现某电影网站最新片源名称列表及详情页下载地址的抓取. webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发. WebMagic 特点: 完全 ...

  2. AI:为你写诗,为你做不可能的事

    最近,一档全程高能的神仙节目,高调地杀入了我们的视野: 没错,就是撒贝宁主持,董卿.康辉等央视名嘴作为评审嘉宾,同时集齐央视"三大名嘴"同台的央视<主持人大赛>,这够不 ...

  3. 遍历json数据的几种方式。

    json(JavaScript Object Notation),json是一种多用于存储和交换文本信息的语法.他能够进行数据的传输,通常和ajax一起使用.它具有体积小.速度快,易解析等诸多优点. ...

  4. iOS动画浅汇

    转自:http://www.cocoachina.com/ios/20160311/15660.html 在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳 ...

  5. react-native 相对项目路径导入组件 ___ babel-plugin-root-import

    在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,经常不记得这是多深,有没有一个插件,能自动帮我们解决这样的问题? 使用指南 我们使用的目标要达到以下的 ...

  6. LightOJ 1344 Aladdin and the Game of Bracelets

    It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summons a ...

  7. HihoCoder 1398 网络流 - 最大权闭合子图

    周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编号1. ...

  8. .net core 3.1简体中文语言包,英文只能提示变成中文!

    .net core 3.1简体中文语言包,英文只能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了,由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文 ...

  9. Django 08

    目录 sweetalert弹窗 bulk-create 自定义分页器 sweetalert弹窗 下载sweetalert并存放在Django项目中的静态文件夹中 https://github.com/ ...

  10. 《Java练习题》进阶练习题(一)

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序48 ...