对应每一章的数据结构代码2

链式表头插法//链表中有个重要思路找另一个结点做标记,用标记前一个结点找其前驱,只起标记作用的不用开辟空间,只做一个初始化函数可以多次调用
#include “stdio.h”
#include “stdlib.h”
typedef struct lnode
{
int data;//数据域
struct lnode *next;//指针域
}lnode,*linklist;//结构体类型 指向结构体类型的指针
linklist initlist(linklist head)//初始化链表
{
head=(linklist)malloc(sizeof(lnode));//给结点赋空间
head->next=NULL;
return head;//返回链表指针型
}
void createlist(linklist l,int n)//输入元素
{
int i;
linklist p;
for(i=0;i<n;i++)
{
p=(linklist)malloc(sizeof(lnode));//开辟链表类型空间给linklist,传给p
scanf("%d",&p->data);
p->next=l->next;
l->next=p;
}
}
void listinsert(linklist l,int n)//插入第n个数
{
linklist p,s;
int i;
s=(linklist)malloc(sizeof(lnode));
p=(linklist)malloc(sizeof(lnode));
p=l->next;
for(i=1;i<n;i++)
p=p->next;//第n个数 //3 4 5 6 7
s->next=p->next;
p->next=s;
printf(“输入要插入的数字”);
scanf("%d",&s->data);
}
void listdelete(linklist l,int n)//删除元素
{
linklist p,s;
int i;
p=l->next;
for(i=1;i<n-1;i++)
p=p->next;//第n-1个数 1 2 3 4 5
s=p->next;
p->next=s->next;
free(s);
}
void get(linklist l,int n)
{
linklist p;
int i,s;
p=(linklist)malloc(sizeof(lnode));
p=l->next;
for(i=1;i<n;i++)
p=p->next;
s=p->data;
printf(“查找到的元素是%d”,s);
}
void displink(linklist l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
linklist l;
int n=4,a=3,b=2,c=1;
l=initlist(l);
createlist(l,n);
displink(l);
listinsert(l,a);
printf(“插入后的数列”);
displink(l);
listdelete(l,b);
printf(“删除后的数列”);
displink(l);
get(l,c);
}
尾插法
#include “stdio.h”
#include “stdlib.h”
typedef struct lnode
{
int data;
struct lnode *next;
}lnode,*linklist;//结构体类型 只想结构体类型的指针
linklist initlist(linklist head)//初始化链表
{
head=(linklist)malloc(sizeof(lnode));
head->next=NULL;
return head;
}
void createlist(linklist l,int n)
{
int i;
linklist p,s;
p=(linklist)malloc(sizeof(lnode));
p=l;
for(i=0;i<n;i++)
{
s=(linklist)malloc(sizeof(lnode));
scanf("%d",&s->data);
p->next=s;
p=s;//p做标记指针
}
p->next=NULL;
}
void listinsert(linklist l,int n)
{
linklist p,s;
int i;
s=(linklist)malloc(sizeof(lnode));
p=(linklist)malloc(sizeof(lnode));
p=l->next;
for(i=1;i<n;i++)
p=p->next;//第n个数
s->next=p->next;
p->next=s;
printf(“输入要插入的数字”);
scanf("%d",&s->data);
}
void listdelete(linklist l,int n)
{
linklist p,s;
int i;
p=l->next;
for(i=1;i<n-1;i++)
p=p->next;//第n-1个数 1 2 3 4 5
s=p->next;
p->next=s->next;
free(s);
}
void get(linklist l,int n)
{
linklist p;
int i,s;
p=(linklist)malloc(sizeof(lnode));
p=l->next;
for(i=1;i<n;i++)
p=p->next;
s=p->data;
printf(“查找到的元素是%d”,s);
}
void displink(linklist l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
linklist l;
int n=4,a=3,b=2,c=1;
l=initlist(l);
createlist(l,n);
displink(l);
listinsert(l,a);
printf(“插入后的数列”);
displink(l);
listdelete(l,b);
printf(“删除后的数列”);
displink(l);
get(l,c);
}
利用循环链表连接两个表//尾指针不为空
#include “stdio.h”
#include “stdlib.h”
typedef struct lnode
{
int data;
struct lnode *next;
}lnode,*linklist;//结构体类型 只想结构体类型的指针
linklist initlist(linklist head)//初始化链表
{
head=(linklist)malloc(sizeof(lnode));
head->next=NULL;//指针型引用->
return head;
}
void createlist(linklist la,int n)//一个创建函数建一个链表
{
int i;
linklist p,s;
p=(linklist)malloc(sizeof(lnode));
p=la;
for(i=0;i<n;i++)
{
s=(linklist)malloc(sizeof(lnode));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=la;//尾指针指向头指针
}
void createlist1(linklist lb,int m)
{
int i;
linklist p,s;
p=(linklist)malloc(sizeof(lnode));
p=lb;
for(i=0;i<m;i++)
{
s=(linklist)malloc(sizeof(lnode));
scanf("%d",&s->data);
p->next=s;
p=s;
}
p->next=lb;
}
void mergelist(linklist la,linklist lb,int n,int m)//合并
{
linklist pa,pb;
pa=la->next;//la为头指针 pa为头节点
pb=lb->next;
int i;
for(i=0;i<n-1;i++) //1 3 5 7
pa=pa->next;
pa->next=pb;
for(i=0;i<m-1;i++)
pb=pb->next;
pb->next=la;
free(lb);
}
void displink(linklist la)
{
linklist p;
p=la->next;
while(p!=la)
{
printf("%d",p->data);
p=p->next;
}
}
void main()
{
int n=4,m=2;
linklist la,lb;
la=initlist(la);
lb=initlist(lb);
createlist(la,n);
createlist(lb,m);
mergelist(la,lb,n,m);
displink(la);
}

发布了41 篇原创文章 · 获赞 1 · 访问量 1253

猜你喜欢

转载自blog.csdn.net/xiaoqiang616717/article/details/100637477