因为数据结构的书上很多都是伪代码,所以在这里共享下自己摸索出来的怎么样数据结构的完整简单编程,给自学者参考,参考。
头插法的简单应用:
///定义一个节点类型
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}lnode,*link;
///
link tou() //头结点输入
{
int x;
link l,p;
l=(lnode*)malloc(sizeof(lnode)); //动态分配一个内存空间
l->next=NULL;
printf("please input some number\n");
scanf("%d",&x); //输入
while(x!=0000)
{
p=(lnode*)malloc(sizeof(lnode));
p->data=x;
p->next=l->next;
l->next=p;
scanf("%d",&x);
}
return l;
}
int tt(link l)
{
int j;
link p;
p=l->next;
j=0;
while(p)
{
j++;
p=p->next;
}
return j;
}
void zhaoshu(link l,int i)
{
link p;
p=l->next;
while(p->data!=i && p!=NULL)
{
p=p->next;
}
if(p->data!=i)
{
printf("你输入的数没有相同的\n");
exit(0);
}
else
printf("你输入的数有相同的\n");
}
void print(link l)
{
link p;
p=l->next;
printf("你输入的数有:\n");
while (p!=NULL)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n");
}
///
void shan(link l,int t)
{
int x;
lnode *p,*pre,*q;
pre=l;
p=l->next;
while(p!=NULL && p->data!=t)
{
pre=p;
p=p->next;
}
if(p->data!=t)
{
printf("没有这个节点,所以不能删除\n");
}
else
{
x=p->data;
pre->next=p->next;
free(p);
printf("这个带有数据%d的节点被删除\n",x);
}
q=l->next;
while(q!=NULL)
{
printf("%5d",q->data);
q=q->next;
}
printf("\n");
}
//
void zhengjia(link l, int i)
{
link s,p,q;
int x;
printf("请输入一个数,然后就可以插进里面去\n");
scanf("%d",&x);
p=l->next;
s=(lnode*)malloc(sizeof(lnode*));
s->data=x;
while(p!=NULL && p->next->data!=i)
{
p=p->next;
}
s->next=p->next;
p->next=s;
q=l->next;
while(q!=NULL)
{
printf("%5d",q->data);
q=q->next;
}
printf("\n");
}
//
void main()
{
int t,i,p;
link l;
printf("请输入一个数\n");
scanf("%d",&i);
l=tou();
print(l);
t=tt(l);
printf("你总共输入了%d个数\n",t);
zhaoshu(l,i);
shan(l,i);
scanf("%d",&p);
zhengjia(l,p);
}
//
尾插法的简单应用:
//定义一个节点类型/
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}lnode,*link;
//通过尾插法构建一个链表//
link weicha()
{
link l,r,p; //3个相同类型的指针
int x;
printf("请往节点中输入数字\n");
l=(lnode*)malloc(sizeof(lnode*)); //l指针
l->next=NULL; //头结点赋值为空
r=l; //r指针=l指针
scanf("%d",&x); //输入
while(x!=0000)
{
p=(lnode*)malloc(sizeof(lnode*)); //动态分配一个内存空间
p->data=x;
p->next=r->next;
r->next=p; //在尾部插入新节点
r=p; //指向新的尾节点
scanf("%d",&x);
}
return l;
}
//
void print(link l) //输出
{
link p;
p=l->next; //这个类型的p指向l链表的头结点
while(p!=NULL)
{
printf("%3d",p->data); //输出
p=p->next;
}
printf("\n");
}
/
void main()
{
link l;
l=weicha(); //定义一个
print(l);
}
//