大话数据结构顺序表和链表
一 、顺序表
基本定义
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;
}
如下是双向链表的插入操作:注意顺序不能搞错
大话数据结构顺序表和链表相关推荐
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- 8.基本数据结构-顺序表和链表
一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计 ...
- 数据结构 | 顺序表、链表和数组是逻辑结构还是物理(存储)结构?
1.逻辑结构和物理结构的定义 首先数据结构分为两个层次:逻辑结构 和 物理结构(存储方式) . 逻辑结构是用来描述数据元素之间的逻辑关系,是一个抽象概念,与数据的实际存储无关,独立于计算机存在. 物理 ...
- 数据结构--顺序表、链表、栈、队列、树、文件(visual studio可运行)
顺序表的顺序存储(增删查) #include <stdio.h> #include <stdlib.h> #define MaxSize 50 typedef int Elem ...
- 数据结构之线性表(顺序表和链表)
线性表 首先线性表的定义就是:零个或多个数据元素的有限序列. 列如高考前每个班级排队照准考证,这个队伍就可以看做一个线性表,大家都井然有序的排着队,是一个有限的序列,一个班就那么几十个人,而且每个人之 ...
- 【顺序表和链表】实现增删查改数据结构 OJ题编程
目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...
- python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)
链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...
- 数据结构顺序表的查找_数据结构1|顺序表+链表
数据结构学习笔记1 进度:静态分配顺序表+单链表 参考资料:b站 王道考研+小甲鱼 < 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高项目.的阶数. 推导大O阶方法 ...
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
最新文章
- python项目2019_2019 年 11 月精选 GitHub 上 几个牛逼 Python 的项目
- python操作系统-Python实现获取操作系统版本信息方法
- 通过rsync清除目录的shell脚本
- MlLib--逻辑回归笔记
- 【HDOJ】4541 Ten Googol
- python-基础-代码备注与变量命名方法
- 中lisp文件_关于 Emacs 中的变量你需要知道的事情 | Linux 中国
- 网站项目管理规范手册
- 【Java 泛型】泛型(泛型类型、原始类型、泛型方法)、通配符(上界、下界、无限制、继承)
- ubuntu中bash,sh,./,bash区别
- Redis之Pipeline(管道)
- 拿下上市企业offer月薪17.5K!岁月不会亏待每一个用力奔跑的人
- python模拟抛硬币_python模拟抛硬币
- 企业微信工具栏获取外部联系人unionid
- 基于组态软件的35kV变电站监控系统设计简介
- 风口下的远程办公:钉钉微信死磕,百度趁势入场
- 暗黑破坏神资源 - 紫冰整理
- 为什么机器学习之路没有捷径可走
- 自动生成Changelog
- word标题段前断后设置都为6磅,标题段前无效