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语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- C++ 关键字之override
非原创,转载自stackoverflow 确切的说override并非一个keyword The override keyword serves two purposes: It shows the ...
- 鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法
鲲鹏处理器NUMA简介 随着现代社会信息化.智能化的飞速发展,越来越多的设备接入互联网.物联网.车联网,从而催生了庞大的计算需求.但是功耗墙问题以功耗和冷却两大限制极大的影响了单核算力的发展.为了满足 ...
- hdu3999 The order of a Tree
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3999 题意:给一序列,按该序列插入二叉树,给出字典序最小的插入方法建相同的一棵树出来.即求二叉树的先序 ...
- screen虚拟终端工具
说明:有时候我们要执行一个命令或脚本,需要几小时甚至几天,但是不能中断,有时想查看当前输出信息的时候,可以将它丢到后台运行,但是后台运行却无法显示或输出相关信息出来:我们可以使用一个虚拟终端工具scr ...
- zabbix环境搭建部署(一)
Linux高端架构师课程 Linux实战运维国内NO.1全套视频课程 QQ咨询:397824870 > 监控报警 > zabbix环境搭建部署(一) zabbix环境搭建部署(一) 监 ...
- Js 与浮点数
同步发表在我的博客:jmingzi 当你学习一个知识点没有方向时,可以尝试以解决问题的角度来理解它. 例如这个知识点我们可以从以下问题开始: 你看的到 1 真的是整数 1 吗? 为什么0.1 + 0. ...
- C++程序设计实验考试准备资料(2019级秋学期)
程序设计实验考试准备资料 ——傲珂 #include<bits/stdc++.h> C++常用函数: <math.h>头文件 floor() 函数原型:double floor ...
- 在.Net Core中记录日志
一个完善的系统,必然会有非常完善的日志记录,用户的操作.系统的运行状况等信息被完整的记录下来,方便我们对系统进行维护和改进..net core 也为日志记录提供了内置的支持. 在控制台程序中记录日志 ...
- Linux Bash之正则表达式
首先注意:正则表达式与通配符是完全不同的概念.通配符(wildcard)代表的是 Bash 操作接口的一个功能,而正则表达式是一种字符串处理的表示方式,一定要区分开来. 正则表达式(Regular E ...
- 关于爬取babycenter.com A-Z为顺序的所有英文名及其详细属性
这一次爬取的内容已经在标题里提到了,下面是详细要求及其图示: 1.首先以A-Z的顺序获取所有英文名,最后爬取该英文名的详细信息. 2.CSV的header以3中的单词为准,请别拼错.如果没有对应的数 ...