**
**
***备注:***自己刚学习数据结构,用来记录自己的学习之旅途,用于复习,一开始学的时候很是不能理解,但 现在有了一定的理解,在此代码中一定要理解各个模块的核心操作 以及注意在打印中的一个小问题。
所学习书籍为《数据结构–用c语言描述》(第2版)
//单链表的操作
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data; //数据域
struct node *next; //指针域
}node;
void initlist(node *l) //初始化单链表指针域为空
{
l->next=NULL;
}
void lengthlist(node *l)
{
int length=0;
node *p=l;
while(p!=NULL)
{
p=p->next;
length++;
}
printf("该单链表的长度为:%d\n",length);
}
void createhead(node *l) //头插法建表
{
node *p=l,*s;
int flag=1;
char c;
while(flag)
{
if((c=getchar())!='$')
{
s=(node*)malloc(sizeof(node));
s->data=c;
s->next=p->next;
p->next=s;
}
else
{
flag=0;
}
}
}
void createtail(node *l)
{
node *s,*r; //设置一个尾指针,使得其始终指向尾指针
int flag=1;
char c;
r=l;
while(flag)
{
if((c=getchar())!='$')
{
s=(node*)malloc(sizeof(node));
s->data=c;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
node *get(node *l,char x) //判断该元素是否在单链表中
{
node *p;
p=l->next;
while(p!=NULL)
{
if(p->data==x)
{
printf("找到了该元素\n");
return p;
}
p=p->next;
}
printf("该元素不在单链表中\n");
return NULL;
}
node *locate(node *l,int n) //查找单链表中特定位置的元素的值
{
node *p;
int k=0;
p=l->next;
while(p!=NULL&&(k<n-1))
{
p=p->next;
k++;
}
if(k==n)
{
printf("第%d个位置的元素为:%c",n,p->data);
return p;
}
else
{
printf("查找位置不合法\n");
return NULL;
}
}
int insertlist(node *l,int n,char x) // 在特定的位置插入特定的数值
{
node *p=l->next,*s;
int k=0;
while(p!=NULL&&(k<n-1))
{
p=p->next;
k++;
}
if(p==NULL)
{
printf("插入位置不合法\n");
return 0;
}
s=(node*)malloc(sizeof(node));
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
int dellist(node *l,int n) //删除指定位置的元素
{
node *p=l,*r;
int k=0;
while(p!=NULL&&(k<n-1))
{
p=p->next;
k++;
}
if(p==NULL)
{
printf("删除位置不合法\n");
return 0;
}
r=p->next;
p->next=r->next;
free(r);
return 1;
}
void print(node *l) //打印该单链表 一定要注意打印表的问题,在这的p=l->next ,先打印再加加 否则会导致后面的无法正常运行
{
node *p=l->next;
while(p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
node *s=(node*)malloc(sizeof(node));
initlist(s);
createhead(s); //createtail(s);
print(s);
lengthlist(s);
get(s,'k');
locate(s,5);
insertlist(s,5,'p');
print(s);
insertlist(s,200,'a');
dellist(s,4);
print(s);
dellist(s,300);
}