手机版

C语言“单链表”常用语句源代码!

时间:2025-05-14   来源:未知    
字号:

C语言“单链表”常用语句源代码!

#define DATATYPE2 char

typedef struct node
{
DATATYPE2 data;
struct node *next;
}LINKLIST;
#include <stdio.h>
#include <malloc.h>


int locate(LINKLIST *a,char x)
{
LINKLIST *la;
la=a->next;
while(la!=NULL)
if(la->data==x) return 1;
else la=la->next;
return 0;
}


//将x元素加入表a头中
void insert(LINKLIST *a,char x)
{
LINKLIST *p;

p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=x;
p->next=a->next;
a->next=p;
}

//两链表并集
void unionn(LINKLIST *a1,LINKLIST *b1)
{
LINKLIST *lb;

lb=b1->next;
while(lb!=NULL)
{
if(! locate(a1,lb->data))//如果b1表中的一个元素不在a1表中
insert(a1,lb->data);//则将b1表中的该元素加入a1表中
lb=lb->next;
}
}

//a,b为两有序链表,合并到C表保持有序
void unite(LINKLIST *a,LINKLIST *b,LINKLIST *c)
{
LINKLIST *la,* lb,* lc,*p;
la=a->next;
lb=b->next;
lc=c;
while(la!=NULL && lb!=NULL)
{
if(la->data<=lb->data)
{
p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=la->data;
p->next=NULL;
lc->next=p;
lc=lc->next;
la=la->next;
}
else
{
p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=lb->data;
p->next=NULL;
lc->next=p;
lc=lc->next;
lb=lb->next;
}
}
while(la!=NULL)
{
p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=la->data;
p->next=NULL;
lc->next=p;
lc=lc->next;
la=la->next;
}
while(lb!=NULL)
{
p=(LINKLIST *)malloc(sizeof(LINKLIST));
p->data=lb->data;
p->next=NULL;
lc->next=p;
lc=lc->next;
lb=lb->next;
}
}

//无序链表中删除重复元素,即重复元素只保留一个
void deletel(LINKLIST *a)
{
LINKLIST *la,*p,*q;

la=a->next;
while(la!=NULL)
{
q=la;
p=la->next;
while(p!=NULL)
{
if(p->data==la->data)
{
p=p->next;
q->next=p;
}
else
{
q=p;
p=p->next;
}
}
la=la->next;
}
}

//有序链表中删除重复元素,重复元素只保留一个
void deletey(LINKLIST *a)
{
LINKLIST *la;
la=a->next;
while(la!=NULL && la->next!=NULL)
if(la->data==la->next->data)
la->next=la->next->next;
else la=la->next;
}


//有序表中插入元素x,并保持表有序
void inser_order(DATATYPE2 x,LINKLIST *head)
{
LINKLIST *pr,*pn,*pp;

pr=head;
pn=head->next;
while(pn!=NULL && pn->data<x)
{
pr=pn;
pn=pn->next;
}
pp=(LINKLIST *)malloc(sizeof(LINKLIST));
pp->data=x;
pp->next=pr->next;
pr->next=pp;
}

//将单链表元素逆置
LINKLIST *invertlink(LINKLIST *head)
{
LINKLIST *p,*q,*r;
q=NULL;
p=head;
while(p!=NULL)
{
r=q;
q=p;
p=p->next;
q->next=r;
}
return q;
}

//输出不带头结点的单链表元素值并计数
int count_nohead(LINKLIST *head)
{
int i=0;
LINKLIST *p;
p=head;
printf("
;输出单链表元素值:");
while(p!=NULL)
{
printf("%c",p->data);
i++;
p=p->next;
}
printf("\n");
return i;
}

//输出

C语言“单链表”常用语句源代码!

带头结点的单链表元素值并计数
int count_head(LINKLIST *head)
{
int i=0;
LINKLIST *p;

p=head->next;
printf("输出单链表元素值:");
while(p!=NULL)
{
printf("%c",p->data);
i++;
p=p->next;
}
printf("\n");
return i;
}

//用头插入法建立不带头结点的单链表
LINKLIST *creatlink_nohead_head(LINKLIST *head)
{
LINKLIST *t;
char ch;

printf("单链表元素值为单个字符,连续输入,以$为结束字符:");
while((ch=getchar())!='$')
{
t=(LINKLIST *)malloc(sizeof(LINKLIST));
t->data=ch;
t->next=head;
head=t;
}
return(head);
}

//用头插入法建立带头结点的单链表
LINKLIST *creatlink_head_head(LINKLIST *head)
{
LINKLIST *t;
char ch;

t=(LINKLIST *)malloc(sizeof(LINKLIST));
head=t;
t->next=NULL;
printf("单链表值为单个字符,连续输入,以$为结束字符:");
while((ch=getchar())!='$')
{
t=(LINKLIST *)malloc(sizeof(LINKLIST));
t->data=ch;
t->next=head->next;
head->next=t;
}
return(head);
}

//用尾插入法建立不带头结点的单链表
LINKLIST *creatlink_nohead_rail(LINKLIST *head)
{
LINKLIST *last,*t;
char ch;

last=head;
printf("单链表元素值为单个字符,连续输入,以$为结束符:");
while((ch=getchar())!='$')
{
t=(LINKLIST *)malloc(sizeof(LINKLIST));
t->data=ch;
t->next=NULL;
if(head==NULL)
{
head=t;
last=t;
}
else
{
last->next=t;
last=t;
}
}
return(head);
}

//用尾插入法建立带头结点的单链表
LINKLIST *creatlink_head_rail(LINKLIST *head)
{
LINKLIST *last,*t;
char ch;

t=(LINKLIST *)malloc(sizeof(LINKLIST));
head=t …… 此处隐藏:3857字,全部文档内容请下载后查看。喜欢就下载吧 ……

C语言“单链表”常用语句源代码!.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)