一 、顺序表

基本定义

typedef struct
{int data[MAXSIXE];int len;
}SeqList;

基本操作

//初始化
SeqList *Init_SeqList()
{SeqList *L;L=(SeqList*)malloc(sizeof(SeqList));L->len=0;return L;
}
//创建线性表
void CreateList(SeqList *L)
{int i;printf("Input length of List:");scanf("%d",&i);printf("Input element of List: \n");for(i=1;i<n;i++)scanf("%d",&L->data[i]);
}

插入操作:注意从第i个元素之前插入,所以从后面往前面插入,第i个元素及其之后的元素整体后移。判断插入位置是否合法 (i < 1 || i > L->len+1)。最后不要忘记改变顺序表的长度

void Insert(SeqList *L,int i,int x)
{int j;if(L->len==MAXSIZE-1)printf("FULL!\n");else if(i<1||i>L->len+1)printf("The position is invalid!\n");else{for(j=L->len;j>=i;j--)L->data[j+1]=L->data[j];L->data[i]=x;L->len++;}
}

删除操作:注意判断删除位置条件 (i < 1 || i>L -> len)

void delete(SeqList *L,int i)
{int j;if(L->len==0)printf("EMPTY!\n");else if(i<1||i>L->len)printf("The position is invalid!\n");else{for(j=i+1;j<=L->len;j++)L->data[j-1]=L->data[j];L->len--;}}

查找操作:下面的方法是只要查找到第一个与x相同的元素就返回该元素的位置。第二个算法是将待查找的值存入0号位置,从后往前查找。

int Location1(SeqList *L,int x)
{int i=1;while(i<L->len&&L->data[i]!=x){i++;}if(L->data[i]==x)return i;elsereturn 0;
}
int Location2(SeqList *L,int x)
{int i;i=L->len;L_>data[0]=x;while(L->data[i]!=x)i--;return i;
}

二、单链表

基本定义

typedef struct node
{char data;struct node *next;
}LNode;


基本操作

在表头插入生成单链表:将主函数中指向待生成单链表的指针地址如(&p)传给**head,*head为链表头指针。

//head insert
void CreatLinkList(LNode **head)
{char x;LNode *p;*head=(LNode*)malloc(sizeof(LNode));(*head)->next=NULL;printf("Input any char string:\n");scanf("%c",&x);while(x!='\n'){p=(LNode*)malloc(sizeof(LNode));p->data=x;p->next=(*head)->next;(*head)->next=p;scanf("%c,&x");}
}

在表尾插入生成单链表:p指针用来记录q指针的前驱。

//tail insert
void CreatLinkList(LNode **head)
{LNode *head,*p,*q;char x;head=(LNode*)malloc(sizeof(LNode));p->data=x;p->next=NULL;q=p;          //指针q指向新的链尾节点*pscanf("%c",&x);{while(x!='\n'){p=(LNode*)malloc(sizeof(LNode));p->data=x;p->next=NULL;q->next=p;scanf("%c",&x);}}
}


删除第i个结点:注意查找第i-1个节点。

//查找第i个节点
LNode *Get_LinkList(LNode *head,int i)
{LNode *p=head;int j=0;while(p!=NULL&&j<i){p=p->next;j++;}return p;
}void Delete(LNode *head,itn i)
{LNode *p,*q;p=Get_LinkList(head,i-1);if(p==NULL)printf("第i-1个节点不存在!!\n");else if(p->next==NULL)printf("第i个节点不存在!\n");else{q=p->next;   //q指向第i个节点p->next=q->next;     //从链表删除第i个节点free(q);// 系统回收第i个节点的存储空间}}

三、双向链表

基本定义

typedef struct dlnode
{char data;struct dlnode *prior,*next;
}DLNode;

基本操作
采用头插法生成双向链表:

DLNode *CreatDLinkList()
{DLNode *head,*s;char x;head=(DLNode*)malloc(sizeof(DLNode));head->prior=head;head->next=head;printf("Input any char string\n");scanf("%c",&x);//采用头插法生成双向循环链表while(x!='\n');{s=(DLNode*)malloc(sizeof(DLNode));s->data=x;s->prior=head;s->next=head->next;head->next->prior=s;scanf("%c",&x);}return head;
}

如下是双向链表的插入操作:注意顺序不能搞错

大话数据结构顺序表和链表相关推荐

  1. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  2. 8.基本数据结构-顺序表和链表

    一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计 ...

  3. 数据结构 | 顺序表、链表和数组是逻辑结构还是物理(存储)结构?

    1.逻辑结构和物理结构的定义 首先数据结构分为两个层次:逻辑结构 和 物理结构(存储方式) . 逻辑结构是用来描述数据元素之间的逻辑关系,是一个抽象概念,与数据的实际存储无关,独立于计算机存在. 物理 ...

  4. 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)

    顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...

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

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

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

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

  7. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

  8. 数据结构顺序表的查找_数据结构1|顺序表+链表

    数据结构学习笔记1 进度:静态分配顺序表+单链表 参考资料:b站 王道考研+小甲鱼 < 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高项目.的阶数. 推导大O阶方法 ...

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

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

最新文章

  1. python项目2019_2019 年 11 月精选 GitHub 上 几个牛逼 Python 的项目
  2. python操作系统-Python实现获取操作系统版本信息方法
  3. 通过rsync清除目录的shell脚本
  4. MlLib--逻辑回归笔记
  5. 【HDOJ】4541 Ten Googol
  6. python-基础-代码备注与变量命名方法
  7. 中lisp文件_关于 Emacs 中的变量你需要知道的事情 | Linux 中国
  8. 网站项目管理规范手册
  9. 【Java 泛型】泛型(泛型类型、原始类型、泛型方法)、通配符(上界、下界、无限制、继承)
  10. ubuntu中bash,sh,./,bash区别
  11. Redis之Pipeline(管道)
  12. 拿下上市企业offer月薪17.5K!岁月不会亏待每一个用力奔跑的人
  13. python模拟抛硬币_python模拟抛硬币
  14. 企业微信工具栏获取外部联系人unionid
  15. 基于组态软件的35kV变电站监控系统设计简介
  16. 风口下的远程办公:钉钉微信死磕,百度趁势入场
  17. 暗黑破坏神资源 - 紫冰整理
  18. 为什么机器学习之路没有捷径可走
  19. 自动生成Changelog
  20. word标题段前断后设置都为6磅,标题段前无效

热门文章

  1. 关于Java的反射机制,你需要理解这些...
  2. mysql show
  3. CentOs6.5 更新python2.7,以及tab自动补全
  4. 总结CSS3新特性(媒体查询篇)
  5. UIActionSheet 多项弹出框
  6. Spring-Cloud的版本是如何定义的
  7. Docker快速搭建Oracle12c
  8. UC神马数据采集api
  9. docker 完成 redis集群搭建
  10. Postman转换为Jmeter