快捷搜索:  汽车  科技

线性表的链式存储设计思路(链式存储结构以及各种基本操作)

线性表的链式存储设计思路(链式存储结构以及各种基本操作)typedef int Status;#define OK 1#include <stdio.h>#include <stdlib.h>#define ERROR 0

基本操作:插入,与顺序存储结构不同,链表可以直接在插入结点出进行操作比顺序表更方面,时间复杂度更小

删除:链表的基本算法

返回当前地址

以下是代码

#include <stdio.h>

#include <stdlib.h>

#define ERROR 0

#define OK 1

typedef int Status;

typedef int ElemType;

typedef struct Node{

ElemType data;

struct Node *next;

}Node;

typedef struct Node *LinkList;

//表的创建(头插法)

void CreateListHead(LinkList *L int m[] int n){

LinkList p;

int i;

*L=(LinkList)malloc(sizeof(Node));

(*L)->next=NULL;

for(i=0;i<n;i ){

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

p->data=m[i];

p->next=(*L)->next;

(*L)->next=p;

}

}

//表的创建(尾插法)

void CreateListTail(LinkList *L int m[] int n){

LinkList p r;

int i;

*L=(LinkList)malloc(sizeof(Node));

r=*L;

for(i=0;i<n;i ){

p=(Node *)malloc(sizeof(Node));

p->data=m[i];

r->next=p;

r=p;

}

r->next=NULL;

}

//获取元素的操作

Status GetElem(LinkList L int i ElemType *e){

int j;

LinkList p;

p=L->next;

j=1;

while(p&&j<i){

p=p->next;

j;

}

if(!p|| j>i){

return ERROR;

}

*e=p->data;

return OK;

}

//插入元素的操作

Status ListInsert(LinkList *L int i ElemType e){

int j;

LinkList p s;

p=*L;

j=1;

while(p&&j<i){

p=p->next;

j;

}

if(!p||j>i){

return ERROR;

}

s=(LinkList)malloc(sizeof(Node));

s->data=e;

s->next=p->next;

p->next=s;

return OK;

}

//删除元素的操作

Status ListDelete(LinkList *L int i){

int j;

LinkList p q;

p=*L;

j=1;

while(p->next&&j<i){

p=p->next;

j;

}

if(!(p->next)||j>i){

return ERROR;

}

q=p->next;

p->next=q->next;

free(q);

return OK;

}

Status Output(LinkList L){

LinkList p;

p=L->next;

while(p){

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

p=p->next;

}

printf("\n");

}

int main(){

LinkList L;

int i k j n e m[1000];

printf("请输入要存储元素的总个数:");

scanf("%d" &n);

printf("请输入各个元素的值:");

for(i=0;i<n;i ){

scanf("%d" &m[i]);

}

CreateListTail(&L m n);

printf("此时链表的各元素如下:\n");

Output(L);

printf("请输入要获取第j个元素并返回到e值中(输入j的值):");

scanf("%d" &j);

GetElem(L j &e);

printf("此时e的值为第j个元素值:%d\n" e);

printf("请输入在第k个元素前插入一个元素e1:");

int e1;

scanf("%d%d" &k &e1);

ListInsert(&L k e1);

printf("此时链表的各元素如下:\n");

Output(L);

printf("请输入要删除链表中的第几个元素:");

int l;

scanf("%d" &l);

ListDelete(&L l);

printf("此时链表的各元素如下:\n");

Output(L);

return 0;

}

线性表的链式存储设计思路(链式存储结构以及各种基本操作)(1)

以前操作基与数据结构。

猜您喜欢: