#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量
#define LISTINCRESEMENT 100 //线性表存储空间的分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int elemType;//元素类型
typedef struct
{  elemType *List;//线性表首地址  int length;//当前的长度  int listsize;//当前分配的存储容量,以elemType为单位
} SqList;  void AgainMalloc(SqList *L)//空间不够时重新分配空间的函数
{  elemType *newbase;//分配一个临时基址  newbase=(elemType *)realloc(L->List,(L->listsize+LISTINCRESEMENT)*sizeof(elemType));  if(!newbase) exit(OVERFLOW);  L->List=newbase;  L->listsize+=LISTINCRESEMENT;
}  //初始化一个空的线性表
int InitList_Sq(SqList *L)
{  L->List=(elemType *)malloc(LIST_INIT_SIZE*sizeof(elemType));  if(!L->List)exit(OVERFLOW);//overflow  L->length=0;//初始表为空表  L->listsize=LIST_INIT_SIZE;//初始表的存储容量,为LIST_INIT_SIZE个elemType单位  return OK;
}
//求表中元素的个数
int ListLength(SqList *L)
{  return L->length;
}  //遍历顺序表
void TraverseList(SqList *L)
{  int i;  for(i=0; i<L->length; i++)  {  printf("%d ",L->List[i]);  }  printf("\n");  return;
}
//向表头插入元素
void InsertFirst(SqList *L,elemType e)
{  int i;  if(L->length>=L->listsize)  AgainMalloc(L);  for(i=L->length-1; i>=0; i--)  L->List[i+1]=L->List[i];  L->List[0]=e;  L->length++;  return;
}  //向表尾插入元素
void InsertLast(SqList *L,elemType e)
{  if(L->length>=L->listsize)  AgainMalloc(L);  L->List[L->length]=e;  L->length++;  return;
}
//在表中第pos个位置之前插入新元素e
int Insert_Sq(SqList *L,elemType e,int pos)
{  int i;  if(pos<1||pos>L->length+1) return ERROR;  if(L->length>=L->listsize)//存储空间不够,要分配新的空间  AgainMalloc(L);  for(i=L->length-1; i>=pos-1; i--)  L->List[i+1]=L->List[i];  L->List[pos-1]=e;  L->length++;  return OK;
}
//查找给出元素的位置,若存在,给出位置(从1开始算);若不存在,返回-1
void Search(SqList *L,elemType e)
{  int i;  for(i=0; i<L->length; i++)  {  if(L->List[i]==e)  {  printf("找到,%d在第%d个位置\n",e,i+1);  return;  }  }  printf("没找到\n");  return;
}
//删除第pos个元素,并返回其值
elemType DeleteElem(SqList *L,int pos)
{  int i;  elemType temp;  if(pos<1||pos>L->length)  {  printf("pos值越界\n");  exit(1);  }  temp=L->List[pos-1];  for(i=pos; i<L->length; i++)  L->List[i-1]=L->List[i];  L->length--;  return temp;
}
//判断线性表是否为空,为空返回1,不为空返回0
int isEmpty(SqList *L)
{  if(L->length==0)  return 1;  else  return 0;
}  //顺序表的逆置
void Inverse(SqList *L)
{  int low=0,high=L->length-1;  elemType temp;  int i;  for(i=0; i<L->length/2; i++)  {  temp=L->List[low];  L->List[low++]=L->List[high];  L->List[high--]=temp;  }
}  void MergeList(SqList *La,SqList *Lb,SqList *Lc)
{  //elemType *pa=La->List;elemType *pb=Lb->List;  Lc->listsize=Lc->length=La->length+Lb->length;  Lc->List=(elemType *)malloc(sizeof(elemType));  if(!Lc->List) exit(OVERFLOW);  int i=0,j=0,k=0;  while(i<La->length&&j<Lb->length)  {  if(La->List[i]<=Lb->List[j])  {  Lc->List[k++]=La->List[i++];  }  else  {  Lc->List[k++]=Lb->List[j++];  }  }  while(i<La->length)  {  Lc->List[k++]=La->List[i++];  }  while(j<Lb->length)  {  Lc->List[k++]=Lb->List[j++];  }
}
int main()
{  SqList list1;  InitList_Sq(&list1);  int length;  scanf("%d",&length);  int i;  elemType temp;  for(i=0; i<length; i++)  {  scanf("%d",&temp);  InsertLast(&list1,temp);  }  printf("创建好的线性表La=");  TraverseList(&list1);//创建好的顺序表  int pos;  scanf("%d%d",&temp,&pos);  Insert_Sq(&list1,temp,pos);  printf("插入一个元素后的线性表La=");  TraverseList(&list1);//插入一个数字后的线性表  scanf("%d",&pos);  DeleteElem(&list1,pos);  printf("删除一个元素后的线性表La=");  TraverseList(&list1);  scanf("%d",&temp);  Search(&list1,temp);//查找元素  printf("逆置后的线性表La=");  Inverse(&list1);  TraverseList(&list1);  SqList list2;  InitList_Sq(&list2);  scanf("%d",&length);  for(i=0; i<length; i++)  {  scanf("%d",&temp);  InsertLast(&list2,temp);  }  SqList list3;  MergeList(&list1,&list2,&list3);  printf("合并La和Lb后的线性表=");  TraverseList(&list3);  return 0;
}  //顺序表的实现,采用的是结构体成员中的数组实现
<pre name="code" class="cpp">#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>//创建简单静态链表
typedef struct node{int data;struct node *next;
}Node,*pNode;int main()
{pNode Head,p;Node a,b,c;a.data=1;b.data=2;c.data=3;Head=&a;a.next=&b;b.next=&c;c.next=NULL;p=Head;do{printf("%d ",p->data);p=p->next;}while(p!=NULL);return 0;
}
//利用结构体数组实现

C链表(顺序表、静态链表区别)相关推荐

  1. 从多个角度分析顺序表和链表区别和特点

    一. 前言 顺序表和链表由于存储结构上的差异,导致他们有不同的特点,从而适用于不同的场景.虽然他们都属于线性表,但他们的存储结构有着本质的不同: 1. 线性表存储数据,需要预先申请一块存储空间,然后将 ...

  2. 链表和顺序表的一些区别

    顺序表与链表是非常基本的数据结构,它们可以被统称为线性表. 线性表(Linear List)是由 n(n≥0)个数据元素(结点)a[0],a[1],a[2]-,a[n-1] 组成的有限序列. 顺序表和 ...

  3. 2.6顺序表和链表的优缺点(区别、特点)详解

    顺序表和链表由于存储结构上的差异,导致它们具有不同的特点,适用于不同的场景.本节就来分析它们的特点,让读者明白 "在什么样的场景中使用哪种存储结构" 更能有效解决问题. 通过系统地 ...

  4. python列表和链表的区别_顺序表和链表的区别

    一.从操作上角度 顺序表和链表都具有增.删.查.改的相同功能,但算法复杂度却不相同. (1)增:顺序表往指定位置,不覆盖的添加一个值,后面的值日要往后移动,算法复杂度为O(n):链表往指定位置添加一个 ...

  5. 高级线性表——静态链表(最全静态链表解读)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  6. 数据结构之线性表(顺序表和链表)

    线性表 首先线性表的定义就是:零个或多个数据元素的有限序列. 列如高考前每个班级排队照准考证,这个队伍就可以看做一个线性表,大家都井然有序的排着队,是一个有限的序列,一个班就那么几十个人,而且每个人之 ...

  7. 《数据结构》顺序表与链表

    目录 一.线性表 线性表简介 二.顺序表 1.定义顺序表类 2.功能实现: 打印顺序表 在pos位置新增元素 判定是否包含某个元素 查找某个元素对应的位置 获取pos位置的元素 给 pos 位置的元素 ...

  8. 线性表、顺序表和链表,你还分不清?

    摘要:其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系! 本文分享自华为云社区<程序员必会自己设计线性表(顺序表.链表)>,原文作者:bigsai. 前言 其实说实话 ...

  9. 【顺序表和链表】实现增删查改数据结构 OJ题编程

    目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...

  10. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

最新文章

  1. python 读取excel 内的中文显示为unicode 编码
  2. wxWidgets:wxTreeListCtrl类用法
  3. sql where子查询5中字句的使用顺序
  4. VS2010中添加lib库引用
  5. nginx中的nginx.conf.default配置
  6. 建立、遍历二叉树(二叉链表)
  7. 2022年考研计算机-数据库原理8-11章
  8. 拓端tecdat|Python中的Apriori关联算法-市场购物篮分析
  9. UVA 12161 Ironman Race in Treeland (树分治)
  10. netcore读取json文件_NetCore 对Json文件的读写操作
  11. 计算机专业考研电路原理,2016年南开大学综合基础课(模拟电路、数字电路、计算机原理)考研试题.pdf...
  12. 语义分割|学习记录(4)膨胀卷积(空洞卷积 )
  13. 淘宝教育视频加速观看(在淘宝教育上看学习视频,需要加速,在谷歌浏览器上安装视频加速插件)
  14. python dataframe是什么_什么是Pandas的DataFrame?
  15. 图(Graph)详解 - 数据结构
  16. 开发人员troubleshooting的方式
  17. Photoshop-颜色的调整
  18. 编程实战(4)——python识别图像中的坐标点并保存坐标数据
  19. 网校搭建9:微信登录
  20. 咖啡技术培训:6款创意咖啡拿铁教程

热门文章

  1. php5.4环境升级,CentOS环境中编译升级PHP至5.4版本记录
  2. python time智能等待_Python Selenium智能等待
  3. 树莓派跑php,在树莓派4上部署nginx+php
  4. centos右上角wired图标消失有效解决方案【转载】
  5. 如何计算实际物理地址?
  6. python中list是什么类型_Python中的list数据类型
  7. html中什么是语义,html – “语义正确”是什么意思?
  8. python转换函数使用_Python Socket模块中的IP转换函数
  9. 2019年Java初级和高级部分的技术面试
  10. v5系列服务器后面板不存在以下哪款指示,群晖RS10613xs+ NAS服务器后面板简介