赞
踩
- #include <stdio.h>
- #include <stdlib.h>
-
- typedef int ElemType;
-
- typedef struct LNode{//单链表结构体定义
- ElemType data;//数据域
- struct LNode *next;//指针域
- }LNode,*LinkList;
-
- //创,增删改查
-
- //初始化单链表(带头结点)
- bool InitLinkList(LinkList &L){
- L = (LNode *)malloc(sizeof(LNode));//创建头结点
- L->next = NULL;
- return true;
- }
-
- //创建单链表(头插法)
- void CreateLinkList(LinkList &L){
- InitLinkList(L);//初始化单链表
- int elem;
- printf("\n请“依次”输入您要建立的链表,输入-999结束\n") ;
- scanf("%d",&elem);
- while(elem!=-999){
- LNode *s = (LNode *)malloc(sizeof(LNode));//创建新结点以实现插入
- //头插法插入新元素
- s->data = elem;
- s->next = L->next;
- L->next = s;
- //获取新数据元素
- scanf("%d",&elem);
- }
- }
-
- //在某位置插入新元素
- bool InsertById(LinkList &L,int i,int e){
- LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
- int j = 0;//计数器
- while(j<i-1&&p!=NULL){//让计数器随着工作指针递增,直到找到第i-1个位置
- p = p->next;
- j++;
- }
- if(p==NULL||i<1){//检查插入的位置是否有误
- printf("插入的位置有误");
- return false;
- }
-
- //插入成功,开始插入
- LNode *s = (LNode *)malloc(sizeof(LNode));
- s->data = e;
- s->next = p->next;
- p->next = s;
- return true;
- }
-
- //在某位置删除元素(结点),与插入新节点一样,找到第i个位置的前驱结点即可,不同点在于判断语句的工作指针判断需要调整
- bool DeleteById(LinkList &L,int i){
- LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
- int j = 0;//计数器
- while(j<i-1&&p->next!=NULL){//递增,直到找到第i-1个位置(这里前驱结点所指结点不能为空)
- p = p->next;
- j++;
- }
- if(p->next == NULL||i<1){//检查删除的位置是否合法
- printf("\n删除的位置出错!");
- return false;
- }
-
- //删除的位置正确,开始删除
- LNode *q = p->next;//该指针所指结点必定为删除结点
- p->next = q->next;
- q->next =NULL;
- delete(q);
- return true;
- }
-
- //修改某位置元素(与插入结点类似,但工作指针应当指向目标结点位置)
- bool ReviseById(LinkList &L,int i,int e){
- LNode *p = L;//p为工作指针,依次找到第i个位置前一个位置
- int j = 0;//计数器
- while(j<i&&p!=NULL){//递增,直到找到第i个位置(这里前驱结点所指结点不能为空)
- p = p->next;
- j++;
- }
- if(p == NULL||i<1){
- printf("\n修改的位置出错!");
- return false;
- }
-
- //可修改,开始修改元素
- p->data = e;
- return true;
- }
-
-
- //查询所有链表元素
- void ShowLinkList(LinkList L){
- LNode *p = L->next;
- printf("\n该链表元素为:");
- while(p!=NULL){
- printf("%d\t",p->data);
- p=p->next;
- }
- }
-
-
- int main(){
- LNode *L = (LNode *)malloc(sizeof(LNode));
- CreateLinkList(L);
- ShowLinkList(L);
-
- //插入元素功能检查
- InsertById(L,4,4);
- ShowLinkList(L);
-
- //删除元素功能检查
- DeleteById(L,4);
- ShowLinkList(L);
-
- //修改元素功能检查
- ReviseById(L,1,3);
- ShowLinkList(L);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。