C语言——线性表及其应用
程序要求
1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。
3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。
输入和输出的格式
1.顺序线性表的建立、插入及删除
顺序表
- #include<stdio.h>
- #include<stdlib.h>
- #define ListSize 50
- typedef int DataType;
- //线性表的顺序存储方式
- typedef struct {
- DataType data[ListSize];
- int l;
- }SeqList;
- //创建顺序线性表
- void CreateList(SeqList *A,int n)
- {
- int i;
- for(i=;i<n;i++)
- {
- scanf("%d",&(A->data[i]));
- }
- A->l=n;
- }
- //在顺序线性表中插入某个元素
- void InsertList(SeqList *A,DataType x,int i)
- {
- int j;
- if(i< || i>A->l) //插入时的条件
- {
- printf("插入位置错误!\n");
- exit();
- }
- else
- {
- printf("插入成功!\n");
- }
- if(A->l >= ListSize)
- {
- printf("列表溢出!\n");
- exit();
- }
- for(j=A->l-;j>=i-;j--)
- {
- A->data[j+]=A->data[j]; //插入时,把各个元素向后移动后,然后在进行插入
- }
- A->data[i-]=x;
- A->l++;
- }
- //在顺序线性表中删除某个元素
- void DeleteList(SeqList *A,int i)
- {
- int j;
- if(A->l==) //删除时的条件
- {
- printf("列表为空!\n");
- exit();
- }
- if(i< || i>A->l)
- {
- printf("删除位置错误!\n\n");
- exit();
- }
- for(j=i;j<=A->l-;j++) //删除时,把各个元素向前移动,覆盖掉要删除的元素
- {
- A->data[j-]=A->data[j];
- }
- A->l--;
- }
- //输出线性表
- void DisList(SeqList *L)
- {
- int i;
- for(i=;i<L->l;i++)
- printf("%d ",L->data[i]);
- printf("\n");
- }
- void main()
- {
- SeqList *A=(SeqList*)malloc(sizeof(SeqList));
- int a=;
- printf("请输入7个整型元素:\n");
- CreateList(A,a);
- printf("输出SeqList的长度: \n");
- printf("长度=%d\n",A->l);
- printf("表内元素为");
- DisList(A);
- DataType x;
- printf("请输入需要插入的元素的位置!\n");
- int i;
- scanf("%d",&i);
- printf("请输入需要插入的元素!\n");
- scanf("%d",&x);
- InsertList(A,x,i);
- printf("长度=%d\n",A->l);
- printf("表内元素为");
- DisList(A);
- printf("请输入需要删除的元素的位置!\n");
- scanf("%d",&i);
- DeleteList(A,i);
- printf("表内元素为");
- DisList(A);
- printf("长度=%d\n",A->l);
- }
输入和输出的格式
顺序表输入输出:定义输入7个整型元素,回车进行插入和删除,输出线性表
2.链式线性表的建立、插入及删除
单链表
- #include <stdio.h>
- #include <stdlib.h>
- typedef int ElemType;
- //定义结点类型
- typedef struct Node
- {
- ElemType data; //单链表中的数据域
- struct Node *next; //单链表的指针域
- }Node,*LinkedList;
- //单链表的初始化
- LinkedList LinkedListInit()
- {
- Node *A;
- A = (Node *)malloc(sizeof(Node)); //申请结点空间
- if(A == NULL) //判断是否有足够的内存空间
- printf("申请内存空间失败\n");
- A->next = NULL; //将next设置为NULL,初始长度为0的单链表
- return A;
- }
- //单链表的建立
- LinkedList LinkedListCreat()
- {
- Node *A;
- A = (Node *)malloc(sizeof(Node)); //申请头结点空间
- A->next = NULL; //初始化一个空链表
- Node *r;
- r = A;
- ElemType x;
- while(scanf("%d",&x) != EOF)
- {
- Node *p;
- p = (Node *)malloc(sizeof(Node));
- p->data = x;
- r->next = p;
- r = p;
- }
- r->next = NULL;
- return A;
- }
- //单链表的插入,在链表的第i个位置插入x的元素
- LinkedList LinkedListInsert(LinkedList A,int i,ElemType x)
- {
- Node *pre; //pre为前驱结点
- pre = A;
- int tempi = ;
- for (tempi = ; tempi < i; tempi++)
- pre = pre->next; //查找第i个位置的前驱结点
- Node *p; //插入的结点为p
- p = (Node *)malloc(sizeof(Node));
- p->data = x;
- p->next = pre->next;
- pre->next = p;
- return A;
- }
- //单链表的删除,在链表中删除数据值为x的元素
- LinkedList LinkedListDelete(LinkedList A,ElemType x)
- {
- Node *p,*pre; //pre为前驱结点,p为查找的结点。
- p = A->next;
- while(p->data != x) //查找值为x的元素
- {
- pre = p;
- p = p->next;
- }
- pre->next = p->next; //删除操作,将其前驱next指向其后继。
- free(p);
- return A;
- }
- int main()
- {
- LinkedList list,start;
- printf("请输入需要添加单链表的数据:");
- list = LinkedListCreat();
- for(start = list->next; start != NULL; start = start->next)
- printf("%d ",start->data);
- printf("\n");
- int i;
- ElemType x;
- printf("请输入需要插入数据的位置:");
- scanf("%d",&i);
- printf("请输入需要插入数据的值:");
- scanf("%d",&x);
- LinkedListInsert(list,i,x);
- for(start = list->next; start != NULL; start = start->next)
- printf("%d ",start->data);
- printf("\n");
- printf("请输入需要删除的数据的值:");
- scanf("%d",&x);
- LinkedListDelete(list,x);
- for(start = list->next; start != NULL; start = start->next)
- printf("%d ",start->data);
- printf("\n");
- return ;
- }
输入和输出的格式
单链表输入输出:本程序可以输入多个整型数据元素
请输入第一个整数,回车输入下一个数
请输入第二个整数......最后输入Ctrl+z结束输入,进行插入和删除,最后输出单链表
C语言——线性表及其应用的更多相关文章
- C语言 线性表 双向链式结构 实现
一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...
- C语言 线性表 链式表结构 实现
一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...
- C语言 线性表 顺序表结构 实现
一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...
- c语言线性表
#include<stdio.h> #include<time.h> #include<stdlib.h> #define MAXSIZE 20 //初始长度 ty ...
- C语言--线性表
#include<stdio.h>#include<stdlib.h>#include<string.h>#define LIST_SIZE 100#define ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现
注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- 数据结构-线性表的链式存储相关算法(C语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- WebMagic 实现爬虫入门教程
本示例实现某电影网站最新片源名称列表及详情页下载地址的抓取. webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发. WebMagic 特点: 完全 ...
- AI:为你写诗,为你做不可能的事
最近,一档全程高能的神仙节目,高调地杀入了我们的视野: 没错,就是撒贝宁主持,董卿.康辉等央视名嘴作为评审嘉宾,同时集齐央视"三大名嘴"同台的央视<主持人大赛>,这够不 ...
- 遍历json数据的几种方式。
json(JavaScript Object Notation),json是一种多用于存储和交换文本信息的语法.他能够进行数据的传输,通常和ajax一起使用.它具有体积小.速度快,易解析等诸多优点. ...
- iOS动画浅汇
转自:http://www.cocoachina.com/ios/20160311/15660.html 在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳 ...
- react-native 相对项目路径导入组件 ___ babel-plugin-root-import
在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,经常不记得这是多深,有没有一个插件,能自动帮我们解决这样的问题? 使用指南 我们使用的目标要达到以下的 ...
- 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 ...
- HihoCoder 1398 网络流 - 最大权闭合子图
周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编号1. ...
- .net core 3.1简体中文语言包,英文只能提示变成中文!
.net core 3.1简体中文语言包,英文只能提示变成中文!这个是我自己手动用谷歌翻译翻译的一批文档,已经把.net core3.1完全翻译了,由于是翻译器翻译,所以怕翻译有错漏,所以没有去掉英文 ...
- Django 08
目录 sweetalert弹窗 bulk-create 自定义分页器 sweetalert弹窗 下载sweetalert并存放在Django项目中的静态文件夹中 https://github.com/ ...
- 《Java练习题》进阶练习题(一)
编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序48 ...