程序要求

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语言——线性表及其应用的更多相关文章

  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. Java继承、构造、重写

    Music mu=new Music(); Musc m=mu;//地址一样   继承:Java只支持单继承,不支持多继承. Java支持多层(重)继承(继承体系). 如果类之间存在着:is a 的关 ...

  2. pringBoot-MongoDB 索引冲突分析及解决【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. 洛谷 P2388 阶乘之乘 题解

    本蒟蒻又来发题解了QwQ; 看到这个题目,本蒟蒻第一眼就想写打个暴力: 嗯,坏习惯: 但是,动动脑子想一想就知道,普通的的暴力是过不了的: 但是,身为蒟蒻的我,也想不出什么高级的数学方法来优化: 好, ...

  4. IDEA插件开发(一)一个简单的表单demo

  5. [TimLinux] Python __hash__ 可哈希集合

    规则: __hash__ 应该返回一个整数,hash()函数计算基础类型的hash值 可哈希集合:set(), forzenset(), dict() 三种数据结构操作要求 key 值唯一,判断唯一的 ...

  6. 2018ACM/ICPC 焦作网络预选赛-A Magic Mirror

    Jessie has a magic mirror. Every morning she will ask the mirror: 'Mirror mirror tell me, who is the ...

  7. 常见的linux快捷方式和英文错误提示

    第5章 linux常见的快捷方式 Ctrl +l 清屏的意思 2 Ctrl +c 退出当前的进程 3 Ctrl +w 删除光标到空格之间的信息 4 Ctrl +a 快速移动到光标行首 5 Ctrl + ...

  8. Orleans的深入

    1.序列化  序列化配置有几个坑这里我写出来 2.负载均衡 3.定时器与提醒 4.服务启动执行代码 5.监控 序列化 新建实体类 引用的包 Microsoft.Orleans.Core V2.12 M ...

  9. 浅谈Java三大特性

    Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装 ...

  10. React一键复制

    如题,我们怎么在React或者其他的框架中实现一键复制呢,实际上实现一键复制的代码与框架无关,因为他是用的是原生的API,下面我们用React来实现一下    效果: 核心代码: 直接将红框处改为需要 ...