实现链表的初始化,按值查找,插入,删除
2015-09-14 09:03
405 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef struct Node /*结点类型定义*/
{
ElemType data;
struct Node * next;
}Node, *LinkList; void init_linklist(LinkList *l)/*对单链表进行初始化*/
{
*l=(LinkList)malloc(sizeof(Node));
(*l)->next=NULL;
}
void creatlianbiao(LinkList L)
{
Node *s;
char c;
int flag=1;
while(flag)
{
c=getchar();
if(c!='@')
{
s=(Node*)malloc(sizeof(Node)); //建立新节点
s->data=c;
s->next=L->next; //将s节点插入表头
L->next=s;
}
else flag=0;
}
}
Node *Search(LinkList L,ElemType e) // 按值查找
{
Node *p;
p=L->next;
while(p!=NULL)
{
if(p->data!=e)
{
p=p->next; // 指向下一个节点
}
else break;
}
return p;
}
int InsList(LinkList L,int i,ElemType e) // 在带头节点的单链表中第i个位置插入值为e的新节点
{
Node *pre,*s;
pre=L;
int k=0;
if(i<0)
return ERROR;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre) // 相当于pre=null
{
printf("插入的位置不合法!");
return ERROR;
}
s=(Node*)malloc(sizeof(Node)); // 为e申请一个新的节点并由s指向它
s->data=e;
s->next=pre->next;
pre->next=s;
return OK;
}
int DelList(LinkList L,int i,ElemType *e )
{
Node *pre,*r;
int k=0;
pre=L;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除的位置不合理!");
return ERROR;
}
r=pre->next;
pre->next=r->next;
*e=r->data;
free(r);
return OK;
}
void main()
{
LinkList l;
Node *p;
char c;
char *d;
init_linklist(&l);
printf("用头插法建立单链表,请输入链表数据,以@结束!\n");
creatlianbiao(l);
p=l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("请输入要查找的元素值:\n");
fflush(stdin); //清空输入缓冲区
scanf("%c",&c);
p = Search(l,c);
if(p!=NULL)
printf("该结点的值为:%c\n",p->data);
else
printf("未找到此结点!\n");
int flag=0;
int i;
printf("请输入插入的位置和元素:\n");
scanf("%d,%c",&i,&c);
flag=InsList(l, i, c);
if(flag)
printf("插入操作成功!\n");
else
printf("插入操作失败!\n");
p = l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n请输入被删元素的位置:");
scanf("%d",&i);
d= (char*)malloc(sizeof(char));
DelList(l,i,d);
printf("被删除的元素是:%c\n",*d);
p = l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
原csdn博客地址:http://blog.csdn.net/sha_520/article/details/7350727
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef struct Node /*结点类型定义*/
{
ElemType data;
struct Node * next;
}Node, *LinkList; void init_linklist(LinkList *l)/*对单链表进行初始化*/
{
*l=(LinkList)malloc(sizeof(Node));
(*l)->next=NULL;
}
void creatlianbiao(LinkList L)
{
Node *s;
char c;
int flag=1;
while(flag)
{
c=getchar();
if(c!='@')
{
s=(Node*)malloc(sizeof(Node)); //建立新节点
s->data=c;
s->next=L->next; //将s节点插入表头
L->next=s;
}
else flag=0;
}
}
Node *Search(LinkList L,ElemType e) // 按值查找
{
Node *p;
p=L->next;
while(p!=NULL)
{
if(p->data!=e)
{
p=p->next; // 指向下一个节点
}
else break;
}
return p;
}
int InsList(LinkList L,int i,ElemType e) // 在带头节点的单链表中第i个位置插入值为e的新节点
{
Node *pre,*s;
pre=L;
int k=0;
if(i<0)
return ERROR;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre) // 相当于pre=null
{
printf("插入的位置不合法!");
return ERROR;
}
s=(Node*)malloc(sizeof(Node)); // 为e申请一个新的节点并由s指向它
s->data=e;
s->next=pre->next;
pre->next=s;
return OK;
}
int DelList(LinkList L,int i,ElemType *e )
{
Node *pre,*r;
int k=0;
pre=L;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除的位置不合理!");
return ERROR;
}
r=pre->next;
pre->next=r->next;
*e=r->data;
free(r);
return OK;
}
void main()
{
LinkList l;
Node *p;
char c;
char *d;
init_linklist(&l);
printf("用头插法建立单链表,请输入链表数据,以@结束!\n");
creatlianbiao(l);
p=l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("请输入要查找的元素值:\n");
fflush(stdin); //清空输入缓冲区
scanf("%c",&c);
p = Search(l,c);
if(p!=NULL)
printf("该结点的值为:%c\n",p->data);
else
printf("未找到此结点!\n");
int flag=0;
int i;
printf("请输入插入的位置和元素:\n");
scanf("%d,%c",&i,&c);
flag=InsList(l, i, c);
if(flag)
printf("插入操作成功!\n");
else
printf("插入操作失败!\n");
p = l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n请输入被删元素的位置:");
scanf("%d",&i);
d= (char*)malloc(sizeof(char));
DelList(l,i,d);
printf("被删除的元素是:%c\n",*d);
p = l->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
原csdn博客地址:http://blog.csdn.net/sha_520/article/details/7350727
相关文章推荐
- 编写一个简单的proc文件 http://blog.csdn.net/mockbird/article/details/6674017
- linux 学习笔记-------CentOS网络设置方法
- pthread_cond_signal与pthread_cond_wait
- 100+经典Java面试题及答案解析
- Spring MVC的优缺点
- Linux编程学习笔记--proc文件系统 http://www.cnblogs.com/weichsel/archive/2012/06/23/2559613.html
- python:与概率有关的random模块
- 回博客园了
- Java 自定义实现 LRU 缓存算法
- 【科研人员必看!】微软亚洲研究院院长洪小文博士谈科研:自信与谦虚并行
- Hello JSP!——out对象
- Spark入门实战系列--9.Spark GraphX介绍及实例
- [Bootstrap]7天深入Bootstrap(5)JavaScript插件
- 判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)
- proc编程的一个简单例子 http://blog.csdn.net/mailbox2005/article/details/3881538
- 使用Redis的Java客户端Jedis
- window 下tomcat+ngin配置多站点
- Redis的使用
- 用SecureCRT来上传和下载文件
- 【原创】Django-ORM基础