数据结构——单链表

来源:互联网 发布:通用网络加速 编辑:程序博客网 时间:2024/06/06 14:20

今天浪费了好多时间,也许是心里想着明天的考试吧……

可自己也知道这次的考试,自己毕竟过不了了,只好等到今年11月份,想想那时自己已经大三了;还有那么多时间吗!很懊恼今天不知怎么回事,感叹环境真的可以影响一个人,真的可以…………

把今天的学习笔记写下来,没有进行好好的整理,

这回单链表的功能较多,操作比较散,最后一个功能有序合并,让自己做得很是郁闷,不说了……

写下自己的学习笔记,文章只适合刚学数据结构的人,有一定的借鉴价值,本人亲自调试的……

可以运行,因为功能是一步步实现的,有的注销了,想实现的自己好好,看看代码就可以,

很抱歉……自己本准备把所有功能合并起来,做一个小的程序,无奈今天真的心情不太好……

只说一句——抱歉…………

下面是学习笔记…………

#include<stdio.h>
#include<malloc.h>

typedef struct Node
{
char data;
struct Node * next;
}Node,*Linklist;

void inlitlist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(Node));
(*L)->next=NULL;
}
/*
void CreatFromHead(Linklist L)
{
Node *s;
char c;
int flag=1;

while(flag)
{

   c=getchar();
  
   if(c!='#')
   {
    s=(Node*)malloc(sizeof(Node));

    s->data=c;
    s->next=L->next;
    L->next=s;
   }
   else
    flag=0;
}
}
*/


void CreatFromTail(Linklist L)
{
Node *s;
char c;
int flag=1;
while(flag)
{
   c=getchar();
   if(c!='#')
   {
    s=(Node*)malloc(sizeof(Node));
    s->next=NULL;
    s->data=c;
    L->next=s;
    L=s;
   }
   else
    flag=0;
}

}


/*

char searchbynumber(Linklist L,int i)
{
int j=1;
Node *p;
char c;
p=(Node*)malloc(sizeof(Node));

p=L->next;

while(p->next!=NULL&&j<i)
{
   j++;
   p=p->next;
}
if(!p->next)
{
   printf("查找位置不合法……/n");
   return NULL;
}
if(j==i)
{
   c=p->data;
  
}

return c;

}
*/
/*
int searchbyx(Linklist L,char c)
{
Node *p;
p=(Node*)malloc(sizeof(Linklist));
p=L->next;

int j=1;
while(p->next!=NULL&&p->data!=c)
{
   j++;
   p=p->next;
}
if(!p->next)
{
   printf("没有要查找的元素……/n");
   return NULL;
}
if(p->data==c)
   return j;
 

}*/

/*
int Length(Linklist L)
{
int j=0;
Node *p;
p=(Node*)malloc(sizeof(Node));
p=L->next;

while(p!=NULL)
{
   j++;
   p=p->next;
}

return j;
}
*/

/*
void insert(Linklist l,int a,char c)
{ Node *m,*n;
m=(Node*)malloc(sizeof(Node));

m=l->next;

int j=1;
while(m!=NULL&&j<a-1)
{
   j++;
   m=m->next;
}
if(a<1||!m)
{
   printf("插入的位置不合法 ……/n");
   return;
}
else
{
    n=(Node*)malloc(sizeof(Node));
    n->data=c;
    n->next=NULL;
    n->next=m->next;
    m->next=n;
}
 

}
*/

/*
char dellist(Linklist L,int d)
{
Node *p;
char e;
p=(Node*)malloc(sizeof(Node));
p=L->next;

int j=1;

while(p!=NULL&&j<d-1)
{
   p=p->next;
   j++;
}
if(!p)
{
   printf("删除位置不合法……/n");
   return NULL;
}
else
{
   e=p->next->data;
   p->next=p->next->next;
}


return e;

}
*/

Linklist merge(Linklist LA, Linklist LB)

{
Node *pa,*pb;
Node *r;
Linklist LC;

pa=LA->next;
pb=LB->next;


LC=LA;

// LC->next=NULL;

r=LC;

while(pa!=NULL && pb!=NULL)
{
   if(pa->data <= pb->data)
   {
    r->next=pa;
    r=pa;
    pa=pa->next;
   }
   else
   {
    r->next=pb;
    r=pb;
    pb=pb->next;
   }
}
if(pa)
   r->next=pa;
else
   r->next=pb;

// free(LB);

return(LC);
}

void main()
{
Linklist L,La,Lb,Lc;
Node *p,*q,*m;
int i;
char a;
int b;
int c;
char e;
int d;
char f;


inlitlist(&L);
/*
printf("采用头插法建立链表以#号键结束:/n");
CreatFromHead(L);

printf("显示链表:/n");*/

/*
printf("采用尾插法建立链表以#号键结束:/n");
CreatFromTail(L);

printf("显示链表:/n");
p=L->next;
while(p!=NULL)
{
   printf("%c ",p->data);
   p=p->next;
}
*/
/*
printf("/n输入你要查找的元素的位置:");
scanf("%d",&i);
a=searchbynumber(L,i);
if(a)
   printf("查找的元素为:%c/n",a);
else
   return;


*/
/*
printf("/n请输入要查找的元素:");

fflush(stdin);

scanf("%c",&a);
b=searchbyx(L,a);

if(b)
   printf("查找的元素位置为:%d/n",b);
else
   return;
*/
/*
printf("/n链表的长度为:");
c=Length(L);
printf("%d/n",c);
*/
/*
printf("/n请输入要插入的位置和元素:/n");
fflush(stdin);
scanf("%d,%c",&b,&e);
insert(L,b,e);
q=L->next;
while(q!=NULL)
{
   printf("%c ",q->data);
   q=q->next;
}
*/
/*
printf("/n写出你要删除的元素的位置:");
scanf("%d",&d);
f=dellist(L,d);

if(f)
   printf("删除的元素为:%c/n",f);
else
   return;

printf("删除后的数组为:/n");
q=L->next;
while(q!=NULL)
{
   printf("%c ",q->data);
   q=q->next;
}

*/

inlitlist(&La);
printf("采用尾插法建立链表a以#号键结束:/n");
CreatFromTail(La);

printf("显示链表:/n");
p=La->next;
while(p!=NULL)
{
   printf("%c ",p->data);
   p=p->next;
}

inlitlist(&Lb);
printf("/n采用尾插法建立链表b以#号键结束:/n");
CreatFromTail(Lb);


printf("显示链表:/n");
q=Lb->next;
while(q!=NULL)
{
   printf("%c ",q->data);
   q=q->next;
}

 

Lc=merge(La,Lb);

printf("/n 合并后的链表——显示链表:/n");

m=Lc->next;
while(m!=NULL)
{
   printf("%c ",m->data);

   m=m->next;
}
}

 

单链表的基本操作——都已经实现了——只要好好看看——就可以明白——

代码在机子上调试的话,只有有序合并一个功能,其他,自己只要好好改改,就可以了…………

原创粉丝点击