很急 我怎么把数据结构书上的算法在C语言里实现啊??

2024-11-18 22:37:22
推荐回答(5个)
回答(1):

这个是线性表,我也在学,老师讲得飞快,已经讲到图了。书上的算法都是用类C编的,输入到VC里当然运行不了。呵呵。上次参考谭浩强的C把约瑟夫环给做了。代码给你。希望你知道怎么建立线性表(包括顺序和链式)。这个不能急,要慢慢来。
#include
#include
#define LEN sizeof(struct pep)
struct pep{
int num;
int data;
struct pep * next;};
struct pep * creat(){
struct pep * head;
struct pep * p1,* p2;
int i=0,j,n;
printf("请输入人数:");
scanf("%d",&n);
p1=p2=(struct pep *)malloc(LEN);
printf("请输入编号:");
scanf("%d",&p1->num);
printf("请输入密码:");
scanf("%d",&p1->data);
head=NULL;
for(j=1;j i++;
if(i==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct pep *)malloc(LEN);
printf("请输入编号:");
scanf("%d",&p1->num);
printf("请输入密码:");
scanf("%d",&p1->data);
}
p2->next=p1;
p2=p1;
p2->next=head;
return (p2);
}
void main(){
int i,m;
struct pep *p,*q,*r;
p=creat();
q=p->next;
printf("输入你要设定的m值:");
scanf("%d",&m);
printf("正确的出列顺序应为:");
while(1){
for(i=1;i q=p->next->next;
p=p->next;
}
printf("%d ",q->num);
m=q->data;
p->next=q->next;r=q;
q=q->next;
free(r);
if(p==q){
printf("%d\n",p->num);break;
}
}
}

回答(2):

线性表的基本操作,找本书看看吧。
给你一个单链表的源码,你参考一下:
/*单链表的各种操作*/

# define null 0

typedef char ElemType; /* 字符型数据*/

typedef struct LNode
{
ElemType data;
struct LNode *next;
};

setnull(struct LNode **p);
int length (struct LNode **p);
ElemType get(struct LNode **p,int i);
void insert(struct LNode **p,ElemType x,int i);
int delete(struct LNode **p,int i);
void display(struct LNode **p);

main()
{
struct LNode *head,*q; /*定义静态变量*/
int select,x1,x2,x3,x4;
int i,n;
int m,g;
char e,y;

head=setnull(&head); /*建议链表并设置为空表*/
printf("请输入数据长度: ");
scanf("%d",&n);
for(i=1;i {
printf("将数据插入到单链表中: ");
scanf("%d",&y);
insert(&head,y,i);} /*插入数据到链表*/
display(&head); /*显示链表所有数据*/

printf("select 1 求长度 length()\n");
printf("select 2 取结点 get()\n");
printf("select 3 求值查找 locate()\n");
printf("select 4 删除结点 delete()\n");
printf("input your select: ");
scanf("%d",&select);
switch(select)
{
case 1:
{
x1=length(&head);
printf("输出单链表的长度%d ",x1);
display(&head);
}break;

case 2:
{
printf("请输入要取得结点: ");
scanf("%d",&m);
x2=get(&head,m);
printf(x2);
display(&head);
}break;

case 3:
{
printf("请输入要查找的数据: ");
scanf("%d",&e);
x3=locate(&head,e);
printf(x3);
display(&head);
}break;

case 4:
{
printf("请输入要删除的结点: ");
scanf("%d",&g);
x4=delete(&head,g);
printf(x4);
display(&head);
}break;
}
}
}

setnull(struct LNode **p)
{
*p=null;
}

int length (struct LNode **p)
{
int n=0;
struct LNode *q=*p;
while (q!=null)
{
n++;
q=q->next;
}
return(n);
}

ElemType get(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p;
while (j {
q=q->next;
j++;
}
if(q!=null)
return(q->data);
else
printf("位置参数不正确!\n");
}

int locate(struct LNode **p,ElemType x)
{
int n=0;
struct LNode *q=*p;
while (q!=null&&q->data!=x)
{
q=q->next;
n++;
}
if(q==null)
return(-1);
else
return(n+1);
}

void insert(struct LNode **p,ElemType x,int i)
{
int j=1;
struct LNode *s,*q;
s=(struct LNode *)malloc(sizeof(struct LNode));
s->data=x;
q=*p;
if(i==1)
{
s->next=q;
p=s;
}
else
{
while(jnext!=null)
{
q=q->next;
j++;
}
if(j==i-1)
{
s->next=q->next;
q->next=s;
}
else
printf("位置参数不正确!\n");
}
}

int delete(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p,*t;
if(i==1)
{
t=q;
*p=q->next;
}
else
{
while(jnext!=null)
{
q=q->next;
j++;
}
if(q->next!=null&&j==i-1)
{
t=q->next;
q->next=t->next;
}
else
printf("位置参数不正确!\n");
}
if(t=null)
free(t);
}

void display(struct LNode **p)
{
struct LNode *q;
q=*p;
printf("单链表显示: ");
if(q==null)
printf("链表为空!");
else if (q->next==null)
printf("%c\n",q->data);
else
{
while(q->next!=null)
{
printf("%c->",q->data);
q=q->next;
}
printf("%c",q->data);
}
printf("\n");
}

回答(3):

数据结构上的只是给了你思路,省去了变量定义等一些简单的语句,你做的是把这些细节补全,比如ElemType 是什么需要你决定,是int型的还是char的。
一样都在学习数据结构,共勉。~

回答(4):

这个肯定不行啊

回答(5):

书上之上写个函数,你得补全呀。