汽车行业
线姓表—链式存储结构以及各种基本操作你了解多少?
2022-03-19 18:41  浏览:323

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

删除:链表得基本算法

返回当前地址

以下是代码

#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;

}

以前操作基与数据结构。