编译器:vs2013

内容:

#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define LINK_INIT_SIZE 100
#define LISTINCREAMENT 10
#define ElemType int
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef int status;

//定义顺序表,并定义一个新类型Sqlist
typedef struct Sqlist{
ElemType *elem;
int listsize;
int length;
}Sqlist;

//函数声明
status InitList(Sqlist &L);
status CreatList(Sqlist &L);
status PrintfList1(Sqlist L);
status PrintfList2(Sqlist L);
status DeleteList(Sqlist &L, int i);
status ListEmpty(Sqlist L);
status ListLength(Sqlist L);
status InsertList(Sqlist &L, int i, ElemType e);
status DestroyList(Sqlist &L);

int main()
{
int i,n,j ;
ElemType e;
Sqlist L1;
InitList(L1); //顺序表初始化操作

ListEmpty(L1); //顺序表判空

CreatList(L1); //顺序表赋值操作

printf("正序输出为:\n");
PrintfList1(L1); //顺序表正序输出操作
printf("\n");
printf("逆序输出为:\n");
PrintfList2(L1); //顺序表逆序输出操作
printf("\n");

ListLength(L1); //求顺序表表长

printf("请输入插入的位置i=");
scanf_s("%d", &i);
e=rand() % 100 + 1;
InsertList(L1, i, e); //顺序表插入操作
PrintfList1(L1);
printf("\n");

printf("请输入删除的位置j=");
scanf_s("%d", &j);
DeleteList(L1,j); //顺序表删除操作
PrintfList1(L1);

DestroyList(L1); //顺序表销毁操作
PrintfList1(L1);
return 0;
}

//构建空的顺序表
status InitList(Sqlist &L)
{
L.elem = (ElemType*)malloc(LINK_INIT_SIZE*sizeof(ElemType));
if (!L.elem)
exit (OVERFLOW);
L.length = 0; //将新的顺序表长度定为0
L.listsize = LINK_INIT_SIZE; //初始化顺序表大小为LINK_INIT_SIZE
return OK;
}

//顺序表插入操作
status InsertList(Sqlist &L, int i, ElemType e)
{
ElemType *newbase, *q,*p;
if (i<1 || i>L.length + 1)
{
printf("未插入成功!!!\n");
return ERROR;
}
if (L.length >= L.listsize)
{
newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREAMENT)*sizeof(ElemType));
if (!newbase)
exit(OVERFLOW);
L.elem = newbase;
L.listsize += LISTINCREAMENT;
} //检验线性表是否满了,满了则重新增加存储空间
q = &(L.elem[i - 1]);
for (p = &(L.elem[L.length - 1]); p >= q; p--)
*(p + 1) = *p;
*q = e;
L.length++;
return OK;
}

//顺序表输入操作
status CreatList(Sqlist &L)
{
ElemType i=0,e;
for (i = 0; i < 10; i++) //顺序表赋值操作
{
L.elem[i] = rand() % 100 + 1;
L.length++;
}
return 0;
}

//顺序表正序输出操作
status PrintfList1(Sqlist L)
{
int i;
if (L.length == 0)
{
printf("该线性表为空!\n");
return 0;
}
for (i = 0; i < L.length; i++)
printf("L.elem[%d]=%d\n", i + 1, *(L.elem + i));
}

//顺序表删除操作
status DeleteList(Sqlist &L, int i)
{
int *p, *q,e;
if (i<1 || i>L.length + 1)
{
printf("不存在此删除位置!!!\n");
return ERROR;
} //检验输入的i是否在线性表所存在的范围内
p = &(L.elem[i - 1]);
e = *p;
q = L.elem + L.length - 1;
for (p++; p <= q; ++p)
*(p - 1) = *p;
L.length--;
printf("删除的元素为%d\n", e);
return 0;
}

//顺序表逆序输出操作
status PrintfList2(Sqlist L)
{
int i;
if (L.length == 0)
{
printf("该线性表为空!\n");
return 0;
}
for (i = L.length-1; i >=0; i--)
printf("L.elem[%d]=%d\n", i + 1, *(L.elem + i));
}

//求顺序表是否为空
status ListEmpty(Sqlist L)
{
if (L.length == 0)
printf("The List is Empty!!!\n");
else
printf("The List is not Empty!!!\n");
return 0;
}

//求顺序表长度
status ListLength(Sqlist L)
{
printf("线性表的长度为%d\n", L.length);
return OK;
}

status DestroyList(Sqlist &L)
{
free(&L.elem[0]);
L.length=0;
return 0;
}

实验结果

链表操作

#include<malloc.h>

#include<stdlib.h>

typedef int Elemtype;

typedef int Status;

typedef struct LNode{

Elemtype data;

struct LNode *next;

}LNode,*LinkList;

//函数声明

Status CreatList1(LinkList &L, int n);                                   //头插法构建

Status PrintfList(LinkList L);                                          //链表输出

Status CreatList2(LinkList &L, int n);                                   //尾插法构建

Status InverseList(LinkList &L);                                            //逆置链表

int main()

{

LinkList L;

int n,i,e;

printf("请输入建立的线性表结点个数n=");

scanf_s("%d", &n);

CreatList1(L, n);

PrintfList(L);                                                   //头插法建立链表

printf("请输入建立的线性表结点个数n=");

scanf_s("%d", &n);

CreatList2(L, n);

PrintfList(L);                                                   //尾插法建立链表

InverseList(L);                                                //逆置链表

PrintfList(L);

}

//头插法创建链表

Status CreatList1(LinkList &L,int n)

{

int i;

LinkList p;

L = (LinkList)malloc(sizeof(LNode));

L->next = NULL;

for (i = n; i > 0; i--)

{

p = (LinkList)malloc(sizeof(LNode));

p->data = rand() % 100 + 1;

printf("头插法的第%d个数据:%d\n", i,p->data);

p->next = L->next;

L->next = p;

}

return 0;

}

//尾插法构建线性表

Status CreatList2(LinkList &L, int n)

{

LinkList p,q;

int i;

L = (LinkList)malloc(sizeof(LNode));

L->next = NULL;

for (q=L,i = 0; i < n;i++)

{

p = (LinkList)malloc(sizeof(LNode));

p->data = rand() % 100 + 1;

printf("尾插法的第%d个数据:%d", i + 1,p->data);

q->next = p;

q = p;

printf("\n");

}

q->next = NULL;

return 0;

}

//输出链表

Status PrintfList(LinkList L)

{

LNode *p;

if (L->next == NULL)

printf("The List is Empty!!!\n");

for (p = L->next; p != NULL; p = p->next)

printf("%3d ", p->data);

printf("\n");

return 0;

}

//逆置链表

Status InverseList(LinkList &L)

{

LinkList p,q;

for (p = L->next; p->next != NULL; p = p->next);

for (q = L->next; q != p; q = L->next)

{

L->next = q->next;

q->next = p->next;

p->next = q;

}

return 0;

}

实验结果

c数据结构 顺序表和链表 相关操作的更多相关文章

  1. 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚

    遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  4. K:顺序表和链表的比较

     顺序表和链表是线性表的两种基本实现形式(链表还有多种变化形式),对于这两种实现方式,没有一种方法可以称是最好的,他们各自有着各自的特点和优缺点,适用于不同的应用场景.  与顺序表相比,链表较为灵活, ...

  5. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  6. hrbust-1545-基础数据结构——顺序表(2)

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...

  7. C#顺序表 & 单向链表(无头)

    C# 顺序表 非常标准的顺序表结构,等同于C#中的List<T>,但是List<T>在排错查询和数据结构替换上存在缺陷,一些情况会考虑使用自己定义的数据结构 1.优化方向 下表 ...

  8. 数据结构中的顺序表和链表(Python语言)

    转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...

  9. 数据结构Java实现04---树及其相关操作

    首先什么是树结构? 树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树. 树的特点 在一个树结构中,有且 ...

随机推荐

  1. Const(常量)与readonly(只读)的区别

    const与readonly定义的值都不能更改,但它们到底有哪些异同点呢? Const ² Const是常量的意思,其定义的变量只能读取不能更改,且只能在定义时初始化,不能在构造函数与其它属性与方法中 ...

  2. VS 自动添加注释

    现在大多数公司都规定程序员在程序文件的头部加上版权信息,这样每个人写的文件都可以区分开来,如果某个文件出现问题就可以快速的找到文件的创建人,用最短的时间来解决问题,常常是以下格式: //======= ...

  3. MYSQL5.7无法启动服务原因及解决方案

    mysql5.7安装完成后,想要把它发布成windows服务: 首先,应该配置新的配置文件,然后将cmd打开到安装目录的bin文件,键入: mysqld --default-file="D: ...

  4. python2.7安装scikit-learn遇到的问题及解决方法

    安装完matplotlib后,在运行scikit-learn相关的库的时候又遇到缺包的问题,本来以为缺什么包就装什么包,但是由于种种原因,使我走上了弯路: 第一个坑:学校校园网限制.我用scikit- ...

  5. ucenter 新增用户后 自动登录discuz 不用激活

    uc_client models user.php function add_user($username, $password, $email, $uid = 0, $questionid = '' ...

  6. ng-Enter指令

    app.directive('ngEnter', function() { return function(scope, element, attrs) { element.bind("ke ...

  7. Fiddler-1 安装

    1 进入Fiddler官网:http://www.telerik.com/fiddler 点击[Free download]:填写一些信息后就可以下载. 2 双击安装包--下一步dinghanhua下 ...

  8. Linq 备忘录

    public class CTest { public int i { get; set; } public string j { get; set; } } 一.Range var items=En ...

  9. shopex 小知识

    产品链接: http://www.--/product-172.html 中间的数字代表  sdb_goods 表中 的 goods_id  ... 表示数据库里的产品 id. 分类链接: http: ...

  10. 2016 - 1 - 25 CSS初步 (二)

    1.The customising link We can change the link's style when we move our pointer on the link like that ...