哈卡双刀贼拿好吗:数据结构链表问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 03:57:45
#include<stdio.h>
#include<malloc.h>
typedef struct lnode
{
char data;
struct lnode *next;
}linklist;

void creat(linklist *l);
int init(linklist *l,int i,char e);
int del(linklist *l,int i);
void disp(linklist *l);
int exit();

void main()
{linklist *list; char e; int i;
list=(linklist *)malloc(sizeof(linklist));
list->next=NULL;
creat(list);
disp(list);
printf("please enter the char you want to init and the seat:\n");
scanf("%c,%d",&e,&i);
init(list,i,e);
disp(list);
printf("please enter the seat of the char you want to delete :\n");
scanf("%d",&i);
del(list,i);
disp(list);
exit();
}

void creat(linklist *l)
{
linklist *s,*r; int i,n;char a[100];
l=(linklist *)malloc(sizeof(linklist));
l->next=NULL;
r=l;
printf("How many chars do you want to creat?\n");
scanf("%d",&n);
printf("please enter the chars:\n");
for(i=0;i<n;i++)
{
scanf("%c,",&a[i]);
}
for(i=0;i<n;i++)
{
s=(linklist *)malloc(sizeof(linklist));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

int init(linklist *l,int i,char e) /*插入*/
{int j=0;
linklist *p=l,*s;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else{
s=(linklist *)malloc(sizeof(linklist));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
}

int del(linklist *l,int i) /*删除*/
{int j=0;
linklist *p=l,*q;
while(j<i-1&&p!=NULL)
{j++;
p=p->next;
}
if(p==NULL)
return 0;
else{
q=p->next;
if(q==NULL) return 0;
p->next=q->next;
free(q);
return 1;
}
}

void disp(linklist *l) /*显示*/
{
linklist *p=l->next;
while(p!=NULL)
{ printf("%c ",p->data);
p=p->next;
}
printf("\n");
}

int exit()
{
return 0;
}

具有创建,插入,删除,显示功能,编译通过,可为什么显示不正常,我实在想不出,请高手们帮忙啊,谢啦!
我要创建动态链表,由于1楼的回答我把creat函数改成如下,可运行结果还是像刚才一样.

void creat(linklist *l) /*创建链表*/
{
linklist *s,*r;int i,n;
l=(linklist *)malloc(sizeof(linklist));
l->next=NULL;
r=l;
printf("How many chars do you want to creat?\n");
scanf("%d",&n);
printf("please enter the chars:\n");
for(i=0;i<n;i++)
{
s=(linklist *)malloc(sizeof(linklist));
scanf("%c,",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
}

我实在是不理解你啊,你到底是要创建动态链表还是静态链表??
如果是动态,为什么在用malloc分配了空间后又放在数组里?还增加了程序的空间复杂度!
看来你没有完全明白链表的含义。
链表是用链式存储方式存储的线性表,其元素逻辑上相邻,而物理上并不相邻。现在你用数组就是让他们在物理上也相邻了,那你直接用数组实现一个顺序表就可以了嘛。
我把程序下到我的机子上好好看看,看能否给你改好。