首页 > 学院 > 开发设计 > 正文

c语言之单链表

2019-11-08 03:05:42
字体:
来源:转载
供稿:网友

1.什么是链式存储结构

线性表的链式存储结构称为链表。在链表的存储中,每个结点不仅包含所存元素本身的信息,还包含元素之间逻辑关系的信息,即前驱结点包含后继结点的地址信息,这样就可以通过前驱结点中的地址信息方便地找到后继结点的位置。

2.链式存储的特点

(1)链表不支持随机访问。

(2)链表的结点的存储空间利用率较之顺序表稍低一些。

(3)链表支持存储空间的动态分配。

(4)在链表中进行插入操作无需移动元素。

3.单链表结构

typedef struct Node{	int data;	struct Node *next;}Node;

4.单链表实现增删查

头插法图:

实现:

#include<stdio.h>#include<stdlib.h>typedef struct Node{	int data;	struct Node *next;}Node;//头插法创建链表Node *createListByHead(Node *A){	int length,i,x;	Node *p,*s;	A=(Node *)malloc(sizeof(Node));	if(A ==NULL){		PRintf("ERROR");		exit(0);	}	A->next=NULL;	p=A;	scanf("%d", &length);	for(i=0;i<length;i++){		scanf("%d", &x);		s=(Node *)malloc(sizeof(Node));		if(s ==NULL){			printf("ERROR");			exit(0);		}		s->data=x;		s->next=p->next;		p->next=s;	}	return A;}//尾插法创建链表Node *createListByTail(Node *B){	int length,i,x;	Node *p,*q;	B=(Node *)malloc(sizeof(Node));	if(B==NULL){		printf("ERROR");	}	B->next=NULL;	p=B;	scanf("%d",&length);	for(i=0;i<length;i++){		scanf("%d",&x);		q=(Node *)malloc(sizeof(Node));		q->data=x;		p->next=q;		p=p->next;	}	p->next=NULL;	return B;}//查询输入值是否在链表中int findVal(Node *C,int x){	Node *p=C->next;	while(p !=NULL){		if(p->data==x){			return 1;		}		p=p->next;	}	return 0;}//删除单链表结点int deleteList(Node *A,int x){	Node *p=A;	Node *q;	if(findVal(A,x)==0){		return 0;	}	while(p !=NULL){		if(p->next->data==x){			q=p->next;			p->next=q->next;			free(q);			return 1;		}		p=p->next;	}	return 0;}//打印链表所有值void printList(Node *A){	Node *p=A->next;	printf("打印链表结果:/n");	while(p !=NULL){		printf("%d ",p->data);		p=p->next;	}	printf("/n");}void main(){	Node *A,*B;	int x;	//B=createListByHead(A);	B=createListByTail(A);	printList(B);	printf("删除值:/n");	scanf("%d",&x);	deleteList(B,x);	printList(B);	//printf("%d",findVal(B,x));}结果:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表