这个文章中的算法会在之后不断更新,有兴趣的可以关注下
#include<stdio.h>
#include<stdlib.h>
//定义
typedef int ElemType;//用ElemType代替int
typedef struct Node{
ElemType element;
struct Node* link;
}Node;
typedef struct {
struct Node* first;
int n;
}SingleList;
//*******************************
//函数
//初始化
ElemType Init(SingleList *l){
l->first = NULL;
l->n = 0;
return 1;
}
//插入
ElemType Insert(SingleList *l,ElemType x,int i){
Node *p,*q;
int j;
if(i<-1||i>l->n-1)
{
return 0;
}
p = l->first;
for(j=0;j<i;j++)
{
p = p->link;
}
q = (Node*)malloc(sizeof(Node));
q->element = x;
if(i == -1)
{
q->link = l->first;
l->first = q;
}
else
{
q->link = p->link;
p->link = q;
}
l->n++;
return 1;
}
//查找
ElemType Find(SingleList *l,ElemType x)
{
Node* p;
p=l->first;
int j;
for(j = 0;j<=l->n-1;j++)
{
if(x==p->element)
{
printf("存在这个数!");
return 0;
}
p= p->link;
}
if(j == l->n)
printf("不存在!");
return 0;
}
//删除
void Delete(SingleList *l,int i)
{
Node *p,*q;
p = l->first;
int j;
for(j = 0;j<i-1;j++)
{
p = p->link;
}
if(i==0)
{
l->first = l->first->link;
}
else
{
q=p->link;
p->link = q->link;
}
free(q);
l->n--;
}
//显示
void Display(SingleList *l)
{
Node *p;
p = l->first;
int j;
for(j = 0;j < l->n;j++)
{
printf("%d ",p->element);
p = p->link;
}
}
//注销
void Destroy(SingleList *l)
{
Node* p;
while(l->first)
{
p = l->first->link;
free(l->first);
l->first=p;
}
}
//单链表的合并
void MergeList(SingleList *la,SingleList *lb,SingleList *lc)
{
//已知单链表la,lb是非递减的
Node *pa = la->first;
Node *pb = lb->first;
Node *pc = lc->first =la->first;
while(pa&&pb)
{
if(pa->element <= pb->element)
{
pc->link = pa;
pc = pa;
pa = pa->link;
}
else
{
pc->link = pb;
pc = pb;
pb = pb->link;
}
}
pc->link = pa ? pa : pb;
free(lb);//释放lb的头结点
}
int main()
{
SingleList list;
int i,x;
Init(&list);
for(i = 0;i<9;i++)
{
scanf("%d",&x);
Insert(&list,x,i-1);
}
//printf("长度:%d\n",list.n);
Find(&list,8);
//printf("长度:%d\n",list.n);
Delete(&list,7);
//printf("长度:%d\n",list.n);
Display(&list);
//printf("长度:%d\n",list.n);
Destroy(&list);
return 0;
}