#include<stdio.h>
#include<stdlib.h>
#define null 0
typedef struct node
{
char data;
struct node *next;
}listnode;
//创建返回头节点的函数;
listnode *creatlist()
{
listnode *Head=(listnode *)malloc(sizeof(listnode));
listnode *s,*r=Head;
char ch;
printf("请输入链表节点数据:");
ch=getchar();
while(ch!='@')
{
s=(listnode *)malloc(sizeof(listnode));
s->data=ch;
r->next=s;
r=s;
ch=getchar();
}
r->next=null;
return(Head);
}
//链表节点显示函数;
int displist(listnode *Head)
{ listnode *p=Head->next;
int count=0;
if(p==null)
printf("not data!");
else
{
while(p!=null)
{
printf("%2c",p->data);
p=p->next;
count++;
}
}
printf("/nthere are %2d nodes!/n",count);
return count;
}
/*
void displist(listnode *Head)
{
listnode *p=Head->next;
if(p==null)
printf("为空表!");
else
{
while(p!=null)
printf("%4c",p->data);
p=p->next;
}
printf("/n");
}*/
//链表第i-1个节点的查找函数;
listnode *getnode(listnode *Head,int i)
{
listnode *p=Head;
int count=0;
//while(count<i&&p!=null)
while(count<=i&&p!=null)//条件的确立(唯一一点不明确的地方!);
{
p=p->next;
count++;
}
return p;
}
//插入节点的函数;
void insertnode(listnode *Head,char x,int i)
{
listnode *p,*s;
s=(listnode *)malloc(sizeof(listnode));
s->data=x;
if(i==1)
{
s->next=Head->next;
Head->next=s;
}
else
{
p=getnode(Head,i-1);
if(p==null)
{
printf("插入节点函数中i的取值有误!/n");
exit(0);//注意头文件的包含;
}else
{
s->next=p->next;
p->next=s;
}
}
}
//删除节点的函数;
void deletenode(listnode *Head,int i)
{
listnode *p,*r;
p=getnode(Head,i-1);
if(p==null||p->next==null)//前一个节点为空或要删节点不存在;
{
printf("删除节点函数中i的取值有误!/n");
exit(0);//注意头文件的包含;
}else
{
r=p->next;
p->next=r->next;
}
free(r);
}
void main()
{
int node_count;
listnode *head;
//分别显示单向动态链表中节点的个数;及插入删除后的结果;
head=creatlist();
node_count=displist(head);
insertnode(head,'a',2);
node_count=displist(head);
//insertnode(head,'c',3);
//node_count=displist(head);
deletenode(head,1);
node_count=displist(head);
}
//这是我创建的链表有什么好的建议希望给出指点哦!