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语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- 基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离
本节主要介绍webpack打包的时候CSS的处理方式 一.解决什么问题 1.CSS打包 2.CSS处理浏览器兼容 3.SASS支持 4.CSS分离成单独的文件 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails
HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...
- Spring Data JPA 的一对多,一对多,多对多操作
一对一的关联关系 需求:用户与角色的一对一的关联关系 用户:一方 角色:一方 创建 Users 实体 @Entity @Table(name = "t_users") ...
- SpringMVC实现上传下载功能
配置资源(jar包) 将前端页面整理好: 写核心的几个配置文件(applicationContext+wed.xml+jdbc.properties+log4j+springMVC.xml) 都是在s ...
- CoderForces 163E e-Government(AC自动机+树状数组维护fail树的dfs序)
E. e-Government time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Codeforces-501b
Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...
- UVA11324 The Lagest Lique(SCC缩点+DP)
Given a directed graph G, con- sider the following transformation. First, create a new graph T(G) to ...
- ThreadLocal的进化——TransmittableThreadLocal
上一篇文章中,我们谈到了 InheritableThreadLocal,它解决了 ThreadLocal 针对父子线程无法共享上下文的问题.但我们可能听说过阿里的开源产品TransmittableTh ...
- windows下tomcat闪退问题(启动失败)
1. 第一种情况:Java jdk环境变量没配置或配置有问题 java jdk详细的配置过程这里贴一下:https://jingyan.baidu.com/article/6dad5075d1dc40 ...
- org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found
tomcat7,部署tomcat6下的项目统,报tomcat 7: IllegalArgumentException: taglib definitionnotconsistentwithspecif ...