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语言实现)
链表的简单介绍 为什么需要线性链表 当然是为了克服顺序表的缺点,在顺序表中,做插入和删除操作时,需要大量的移动元素,导致效率下降. 线性链表的分类 按照链接方式: 按照实现角度: 线性链表的创建和简单 ...
随机推荐
- “洞察千里”,华为云HiLens如何让无人车智行天下
作者:华为云 Rosie 随着人工智能的普及和渗透,"无人"的场景越来越丰富,无人超市.无人车.无人机等已经融入我们的生活. 乘着这股热浪,华为云携手上海交通大学学生创新中心举办了 ...
- 【跟唐老师学习云网络】-第8篇 iptables - filter过滤功能
[摘要] 前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜.比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题. 一.背景介绍 前面的各种协议已经可以把基本可 ...
- .NET Core简单使用RabbitMq
RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...
- 求亿级记录中搜索次数Top N的搜索词(MapReduce实现)
程序事例: 日志信息: 二手车 1345 二手房 3416 洗衣机 2789 输入: N=2 输出: 二手房 洗衣机 map函数如下: import java.io.IOException; impo ...
- MySQL必知必会(Select, Order by子句)
SELECT prod_name FROM products ORDER BY prod_name; SELECT prod_id, prod_price, prod_name FROM produc ...
- 【新】Docker实战总结
>>> 目录 <<< Docker简介 Docker优势 Docker基本概念 Docker安装使用 Docker常用命令 Docker镜像构建 Docker本地仓 ...
- 2019CCPC秦皇岛 J MUV LUV EXTRA(KMP)
MUV LUV EXTRA Time Limit: 2000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- Codevs-4919 线段树练习4(区间加上一个值并求摸个区间整除k的数的个数,线段树+数组维护)
给你N个数,有两种操作 1:给区间[a,b]内的所有数都增加X 2:询问区间[a,b]能被7整除的个数 输入描述 Input Description 第一行一个正整数n,接下来n行n个整数,再接下来一 ...
- Mybatis代码生成器Mybatis-Generator使用详解
前提 最近在做创业项目的时候因为有比较多的新需求,需要频繁基于DDL生成Mybatis适合的实体.Mapper接口和映射文件.其中,代码生成器是MyBatis Generator(MBG),用到了My ...
- 【Git】学习开始
[Git]学习开始 转载:https://www.cnblogs.com/yangchongxing/p/10172683.html 在线电子书籍:https://git-scm.com/book/z ...