南方电网技术投稿:数据结构链表问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 03:18:19
#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;
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;
}

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;
}
具有创建,插入,删除,显示功能,编译通过,可为什么显示不正常,我实在想不出,请高手们帮忙啊,谢啦!