数据结构c语言版伪指针,严蔚敏那本《数据结构》书上的伪代码要怎么在vc环境中运行?急!很急!非常急!十万火急!...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

honku

2013.11.09

00e27ab806e4881f8254fe7ae8741834.png

采纳率:57%    等级:10

已帮助:170人

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

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值