博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性表
阅读量:6527 次
发布时间:2019-06-24

本文共 5534 字,大约阅读时间需要 18 分钟。

 1. 定义

  (1)顺序存储

typedef struct{	ElemType data[MAXSIZE];	int length;}SqList;

 (2)链式存储

typedef struct  NODE{	int data;	struct NODE *next;}node;

 一个结构内部包含一个类型为该结构本身的成员是非法的,但是包含一个指向该结构的指针是合法的。 注意:这里必须要用结构的标签来声明指针。

2. 实现

(1)顺序存储结构的获取元素,插入,删除操作。

 

#include
#include
#include
#define MAXSIZE 10 #define TRUE 1 #define FALSE 0 typedef struct {
int data[MAXSIZE]; int length; }SqList; void SetElem(SqList *L); int GetElem(SqList *L,int i,int *e); int InsertElem(SqList *L,int i,int e); int DeleteElem(SqList *L,int i); void PrintList(SqList *L); int main() {
SqList list; int m; SetElem(&list); printf("原线性表: "); PrintList(&list); GetElem(&list,1,&m); printf("第1个元素:%d\n",m); InsertElem(&list,1,10); printf("在第1个位置插入10:"); PrintList(&list); DeleteElem(&list,1); printf("删除第1个位置的元素:"); PrintList(&list); return 0; } void SetElem(SqList *L) {
srand((unsigned)time(NULL)); for(int i=0;i
data[i]=rand()%100; L->length=MAXSIZE-1; } int GetElem(SqList *L,int i,int *e) {
if(L->length==0 || i<1 ||i>L->length) return FALSE; *e=L->data[i-1]; return TRUE; } int InsertElem(SqList *L,int i,int e) //在第i个位置之前插入数据元素e {
if(L->length==MAXSIZE || i<1 || i>L->length+1) return FALSE; if(i
length+1) {
for(int k=L->length-1;k>=i-1;--k) {
L->data[k+1]=L->data[k]; } } L->data[i-1]=e; L->length++; return TRUE; } int DeleteElem(SqList *L,int i) //删除第i个位置的数据元素 {
if(i<1 || i>L->length) return FALSE; if(i
length) { for(int k=i-1;k
length-1;++k) L->data[k]=L->data[k+1]; } L->length--; return TRUE; } void PrintList(SqList *L) { for(int i=0;i
length;++i) { printf("%d ",L->data[i]); } printf("\n"); }

    (2)单链表结构

#include
#include
#define TRUE 1 #define FALSE 0 typedef struct NODE {
int data; NODE *next; }Node; typedef Node *LinkList; void CreateList(LinkList *L,int n); void PrintList(LinkList *L); int InsertElem(LinkList *L,int i,int m); int DeleteElem(LinkList *L,int i); void ClearList(LinkList *L); int main() {
LinkList list; CreateList(&list,10); printf("原单链表:"); PrintList(&list); InsertElem(&list,1,100); printf("在第1个元素前插入100: "); PrintList(&list); DeleteElem(&list,11); printf("删除第11个位置的结点:"); PrintList(&list); ClearList(&list); printf("删除整表:"); PrintList(&list); return 0; } /* void CreateList(LinkList *L,int n) //头插法 {
LinkList p; int i; *L=(Node*)malloc(sizeof(Node)); (*L)->next=NULL; for(i=0;i
data=rand()%100; p->next=(*L)->next; (*L)->next=p; } } */ void CreateList(LinkList *L,int n) //尾插法 {
LinkList p,r; int i; *L=(Node*)malloc(sizeof(Node)); r=*L; for(i=0;i
data=rand()%100; r->next=p; r=p; } r->next=NULL; } void PrintList(LinkList *L) {
Node *p; p=(*L)->next; while(p) {
printf("%d ",p->data); p=p->next; } printf("\n"); } int InsertElem(LinkList *L,int i,int m) //在第i个位置前插入一个新结点 {
Node *p,*s; p=*L; int j=1; while(p&&j
next; ++j; } if(!(p->next) || j>i) {
return FALSE; } s=(Node*)malloc(sizeof(Node)); s->data=m; s->next=p->next; p->next=s; return TRUE; } int DeleteElem(LinkList *L,int i) //删除第i个结点 {
Node *p,*q; p=*L; int j=1; while(p->next&&j
next; ++j; } if(!(p->next) || j>i) return FALSE; q=p->next; p->next=q->next; free(q); return TRUE; } void ClearList(LinkList *L) { Node *p,*q; p=(*L)->next; while(p) { q=p->next; free(p); p=q; } (*L)->next=NULL; }

  (3)双向循环链表

#include
#include
#include
#define TRUE 1 #define FALSE 0 typedef struct DulNODE {
DulNODE *prior; DulNODE *next; int data; }DulNode; typedef DulNode *DulLinkList; void CreateLinkList(DulLinkList *L,int n); void PrintList(DulLinkList *L); int InsertElem(DulLinkList *L,int i,int m); void DeleteElem(DulLinkList *L,int i); int main() {
DulLinkList list; CreateLinkList(&list,10); printf("原双向循环链表:"); PrintList(&list); InsertElem(&list,3,100); printf("在第3个位置后插入100:"); PrintList(&list); DeleteElem(&list,3); printf("删除第3个位置的结点:"); PrintList(&list); return 0; } void CreateLinkList(DulLinkList *L,int n) {
DulNode *p,*r; *L=(DulNode*)malloc(sizeof(DulNode)); (*L)->next=*L; (*L)->prior=*L; r=*L; for(int i=0;i
data=rand()%100; r->next=p; p->prior=r; r=p; } p->next=*L; (*L)->prior=p; } void PrintList(DulLinkList *L) {
DulNode *p; p=(*L)->next; while(p!=(*L)) {
printf("%d ",p->data); p=p->next; } printf("\n"); } int InsertElem(DulLinkList *L,int i,int m) //在第i个位置之后插入新元素m {
DulNode *p,*s; p=*L; int j=0; while((p->next!=(*L))&&j
next; ++j; } s=(DulNode*)malloc(sizeof(DulNode)); s->data=m; s->next=p->next; p->next->prior=s; s->prior=p; p->next=s; return TRUE; } void DeleteElem(DulLinkList *L,int i) //删除第i个位置的结点 {
DulNode *p; p=(*L)->next; int j=1; while(p!=(*L)&&j
next; ++j; } p->prior->next=p->next; p->next->prior=p->prior; free(p); }

 

转载于:https://www.cnblogs.com/shiney/archive/2011/12/08/2281034.html

你可能感兴趣的文章
洛谷——P1469 找筷子
查看>>
几句话就能让你明白:网络地址转换(NAT)
查看>>
springboot项目自定义注解实现的多数据源切换
查看>>
如何用javascript正则表达式验证身份证号码是否合法
查看>>
ccf 201803-1 跳一跳(Python实现)
查看>>
特此说明
查看>>
使用flume替代原有的scribe服务
查看>>
用脚本来定制ESXI安装镜像
查看>>
微软企业级加解密解决方案MBAM架构
查看>>
没有苦劳,只有功劳!
查看>>
基于ThinkPHP写的一个简单的CMS系统
查看>>
笔记——搭建简易NFS服务
查看>>
Exchange 2010 DAG local and Site DR/Failover and Fail back
查看>>
LigerUI - 树表格的数据来自Server
查看>>
认证技术概述
查看>>
制作Windows Server 2003/08 image详细步骤与OpenStack介绍
查看>>
2016国赛小结
查看>>
Android Studio 第六十四期 - Android业务组件化之URL Scheme使用
查看>>
Hyper-V 2016 系列教程41 Windows 10 Hyper-V 系统要求
查看>>
EC2 WordPress 移动目录
查看>>