数据结构-c语言代码实现-单链表的基本操作-带头节点-创新互联

目录

创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为鄂托克前企业提供专业的成都做网站、网站制作,鄂托克前网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

单链表-动态分配顺序存储结构

1.单链表—初始化

2.创建单链表

3.单链表-求表长

4.单链表-按位插入

5.单链表-按位删除

6.单链表-查找-按值查找位

7.单链表-判空

8.单链表-销毁

9.单链表-打印

代码实现结果


单链表-动态分配链式存储结构
#include#include#include#define ElemType char

typedef struct Snode{
	ElemType data;//数据域
	struct Snode *next;//指针域
}Snode,*ListSLink;//结点=数据域+指针域
1.单链表—初始化
void ListSLink_Init(ListSLink &L){
	L=(ListSLink)malloc(sizeof(Snode));//生成头结点
	L->next=NULL;
	printf("初始化成功\n");
}
2.创建单链表
void ListSLink_Creat(ListSLink &L)
{
    ElemType data;
    Snode *p=L;//创建指针指向头节点 方便后续遍历
    printf("输入数据:\n");
    scanf("%c",&data);
    getchar();
    while(data!='#'){
        Snode *s=(Snode *)malloc(sizeof(Snode));//新建节点插入
        s->next=p->next;
        p->next=s;
        s->data=data;
        p=p->next;
        printf("输入数据:\n");
        scanf("%c",&data);
        getchar();
    }
}
3.单链表-求表长
int ListSLink_Length(ListSLink L){
	int i=0;//计数器
	Snode *p=L;//p指向头节点
	while(p->next!=NULL){//若p的下一个节点不为空 则p指向p的下一个节点(遍历) 计数器++
		i++;
		p=p->next ;
	}
	return i;//返回计数值
}
4.单链表-按位插入
void ListSLink_Insert(ListSLink &L,int pos,ElemType newval){
	int len=ListSLink_Length(L);//求表长
	if(pos-1>len||pos<1){//若插入位置不合法,则程序异常退出
		printf("链表插入失败\n");
		exit(-1);
	}
	else{
		Snode *p=L;//创建指针指向头节点 方便后续遍历
		while(--pos){//指针指向要插入位置
			p=p->next;
		}
		Snode *s=(Snode *)malloc(sizeof(Snode));//新建节点插入
		s->data =newval;//为新节点数据赋值
		s->next=p->next ;//插入链表中
		p->next =s;
		printf("链表插入成功\n");
	}
}
5.单链表-按位删除
void ListSLink_Delete(ListSLink &L,int pos){
	int len=ListSLink_Length(L);
	if(pos-1>=len||pos<1){//若删除位不合法或表为空,程序异常退出 
		printf("链表删除失败\n");
		exit(-1);
	}
	else{
		Snode *p=L;//创建指针指向头节点 方便后续遍历
		while(--pos){//指针指向要删除的位置
			p=p->next;
		}
		Snode *s=p->next;
		p->next=s->next;
		free(s); //删除并释放节点
		printf("链表删除成功\n");
	}
}
6.单链表-查找-按值查找位
int ListSLink_Seek(ListSLink L,ElemType val){
    int len=ListSLink_Length(L);//表长
    int i=0;
    Snode *p=L;//创建指针指向头节点 方便后续遍历
    while(i!=len){//遍历整个单链表查找元素
        if(p->next->data==val){//若查找成功 返回位号
            printf("按值查找成功\n");
            return i+1;
        }
        else{
        	p=p->next;
            i++;
        }
    } //若遍历完整个链表未查找到值 则返回-1
    printf("按值查找失败\n");
    return -1;
}
7.单链表-判空
void ListSLink_Isvoid(ListSLink L){
	if(L->next!=NULL){
		printf("链表不为空\n");
	}
	else{
		printf("链表为空\n");
	}
}
8.单链表-销毁
void ListSLink_Destory(ListSLink &L){
    Snode *p=L;//创建指针指向头节点 方便后续遍历
    while(p->next!=NULL){//若下一个节点不为空 指针后移到下个节点 释放(删除)此节点
        Snode *s=p;
        p=p->next ;
        free(s);
    }
    L->next=NULL;
    printf("链表销毁成功\n");
}
9.单链表-打印
void ListSLink_Print(ListSLink L){
	Snode *p=L;//创建指针指向头节点 方便后续遍历
	while(p->next!=NULL){//若下一个节点不为空 则指针后移到下个节点 并打印数据
		p=p->next;
		printf("%c ",p->data);
	}
}
代码实现结果
int main()
{
    ListSLink L;
    ListSLink_Init(L);//初始化单链表
    ListSLink_Creat(L);//创建单链表
    ListSLink_Insert(L,1,'A');//插入数据
    ListSLink_Print(L);//打印单链表
	printf("1在表中第%d位\n",ListSLink_Seek(L,'1'));
    ListSLink_Delete(L,1);//按位删除
    printf("单链表长度为:%d\n",ListSLink_Length(L));
    ListSLink_Print(L);//打印单链表 
    ListSLink_Isvoid(L);//判空 
    ListSLink_Destory(L);//销毁单链表 
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页题目:数据结构-c语言代码实现-单链表的基本操作-带头节点-创新互联
分享链接:http://myzitong.com/article/cecccd.html