1.严蔚敏数据结构的也有配套的c语言版带光盘的书是有卖的。
2.我开始学的时候也就是先指针,再结构体分解了去一块块的学习,有点懂了才开始写代码的。
理论的倒是以前学过的,(以前没动手写过)
3.一个单链表的标准模板(我就是模仿这个人的模板开始学习的,再去自己写双链表,栈,二叉树这样一个过程的)
函数的功能和函数名一致的,你可以对照着严蔚敏那本上单链表的函数列表看
include
#include
typedef int ElemType;
#define TRUE 1
#define FALSE 0
#define NULL 0
#define flag -1
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkedList;
LinkedList LinkedListInit()
{
LinkedList L;
L=(LinkedList)malloc(sizeof(LNode));
L->next=NULL;
return L;
}
void LinkedListClear(LinkedList L)
{
L->next=NULL;
printf("链表已经清空\n");
}
int LinkedListEmpty(LinkedList L)
{
if(L->next==NULL)
return TRUE;
else
return FALSE;
}
/* 遍历单链表 check*/
void LinkedListTraverse(LinkedList L)
{
LinkedList p;
p=L->next;
if(p==NULL)
printf("单链表为空表\n");
else
{
printf("链表中的元素为:\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
printf("\n");
}
int LinkedListLength (LinkedList L)
{
LinkedList p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{
j++;p=p->next;
}
return j;
}
LinkedList LinkedListGet(LinkedList L,int i)
{
LinkedList p;int j;
p=L->next; j=1;
while (p!=NULL && j{
p=p->next; j++;
}
if (j==i)
return p;
else
return NULL;
}
int LinkedListLocate ( LinkedList L, ElemType x)
{
LinkedList p;
int j;
p=L->next;
j=1;
while ( p!=NULL && p->data != x)
{
p=p->next;j++;
}
if(p)
return j;
else
return 0;
}
void LinkedListInsert(LinkedList L, int i, ElemType x)
{
LinkedList p,s;
int j;
j=1;p=L;
while(p&&j{
p=p->next;j++;}
if(p==NULL||j>i)
printf("插入位置不正确\n");
else
{
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("%d已插入到链表中\n",x);
}
}
void LinkedListDel(LinkedList L,int i)
{
LinkedList p,q;
int j;
j=1;p=L;
while(p->next&&j{
p=p->next;j++;}
if(p->next==NULL)
printf("删除位置不正确\n");
else {q=p->next;p->next=q->next;free(q);
printf("第%d个元素已从链表中删除\n",i);
}
}
LinkedList LinkedListCreat( )
{
LinkedList L=LinkedListInit(),p,r;
ElemType x;
r=L;
printf("请依次输入链表中的元素,输入-1结束\n");
scanf("%d",&x);
while (x!=flag)
{
p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
int scan()
{int d;
printf(".\n");
printf("*******************************\n");
printf("1.初始化链表\n");
printf("2.输入链表\n");
printf("3.求链表长度\n");
printf("4.检验是不是空链表\n");
printf("5.遍历链表 \n");
printf("6.从链表中按照位置查找元素值\n");
printf("7.从链表中按照元素值查找位置\n");
printf("8.向链表中插入元素\n");
printf("9. 从链表中删除元素\n");
printf("10.清空链表\n");
printf("11.合并有序链表(需要重新输入两个有序递增链表)\n");
printf("键入其他键退出\n");
printf("*******************************\n");
printf(".\n");
scanf("%d",&d);
return(d);
}
LinkedList un(LinkedList La,LinkedList Lb) /*合并链表*/
{
LinkedList p,q,r;
p=La->next;
q=Lb->next;
r=La;
while((p!=NULL)&&(q!=NULL))
if(p->data<=q->data)
{
r->next=p; r=p;p=p->next;
}
else
{
r->next=q; r=q;q=q->next;
}
if(p!=NULL) r->next=p;
if(q!=NULL) r->next=q;
return La;
}
void print(LinkedList L) /*输出链表中的结点*/
{
LinkedList p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
main()
{
int quit=0;
int i,locate;
ElemType e;
LinkedList L,p,La,Lb,Lc;
while(!quit)
switch(scan())
{ case 1:L=LinkedListInit();printf("\n");break;
case 10:LinkedListClear(L);printf("\n");break;
case 3:printf("链表的长度为 %d\n",LinkedListLength(L));break;
case 4:if(LinkedListEmpty(L))printf("链表为空\n");else printf("链表非空\n");break;
case 5:LinkedListTraverse(L);
break;
case 6:printf("请输入待查询元素在链表中的位置:");
scanf("%d",&i);
p=LinkedListGet(L,i);
if(p) printf("链表中第%d个元素的值为:%d\n",i,p->data);
else printf("查询位置不正确\n");
break;
case 7:printf("请输入待查询元素的值:");
scanf("%d",&e);
locate=LinkedListLocate(L,e);
if(locate)
printf("%d在链表中的位置是:%d\n",e,locate);
else printf("链表中没有值为%d的元素\n",e);
break;
case 8:printf("请输入插入元素的位置和值(中间以空格或回车分隔):\n");
scanf("%d%d",&i,&e);
LinkedListInsert(L,i,e);
break;
case 9:if(LinkedListLength(L)==0)
printf("链表已经为空,不能删除\n");
else {printf("请输入待删除元素的位置:\n");
scanf("%d",&i);
LinkedListDel(L,i);}
break;
case 2:L=LinkedListCreat();
printf("\n");break;
case 11:
{printf("合并有序链表:\n");
printf("请输入第一个有序链表\n");
La=LinkedListCreat( );
printf("请输入第二个有序链表\n");
Lb=LinkedListCreat( );
Lc=un(La,Lb);
print(Lc);
break;}
default:quit=1;}
}
你能把他的东西看看懂,关了再自己写上一遍,你也通了,个人感觉后面的case语句便于输入,链表的函数熟练了就可以
4 万事开头难,你会链表之后你会学得很快的,
祝你成功!!!!!!!!!1
这里有严蔚敏数据结构的全部算法实现 有不懂的也可以来问。