链表的建立、插入、删除、查找等操作(按给定值进行查找);
1条回答 默认 最新
- 技术专家团-小桥流水 2021-11-18 16:28关注
参考如下:
#include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct node { ElemType data; struct node* next; }SlinkNode; //1初始化链表 SlinkNode* InitLink(SlinkNode* h) { h = (SlinkNode*) malloc(sizeof(SlinkNode)); h->next = NULL; return h; } //2尾插法 SlinkNode* InsertLinkTail(SlinkNode* h,ElemType e) { SlinkNode* p=h->next; SlinkNode* t = (SlinkNode*)malloc(sizeof(SlinkNode)); t->data = e; t->next = NULL; if(p==NULL) h->next = t; else { while (p->next) { p = p->next; } p->next = t; } return h; } //3显示链表 void showList(SlinkNode* h) { SlinkNode* p = h->next; while (p) { printf("%c ",p->data); p = p->next; } printf("\n"); } //4.头插法 SlinkNode* InsertHead(SlinkNode* h,ElemType e) { SlinkNode *t; t = (SlinkNode*)malloc(sizeof(SlinkNode)); t->data = e; t->next = h->next; h->next = t; return h; } //5.链表的长度 int Length(SlinkNode* h) { SlinkNode* p = h->next; int len=0; while(p) { len++; p = p->next; } return len; } //6.获取pos位置处的元素 int GetElement(SlinkNode* h,int pos,ElemType* e) { SlinkNode* p = h->next; if(pos <1 || pos > Length(h) ) return 0; while(--pos) { p = p->next; } if(p) { *e = p->data; return 1; } return 0; } //7.获取第一个元素e的位置 int GetElePos(SlinkNode* h,ElemType e) { SlinkNode* p = h->next; int i = 1; while(p) { if(p->data == e) return i; i++; p = p->next; } return 0; //没找到返回0 } //8.在pos位置插入元素 SlinkNode* InsertAt(SlinkNode* h,int pos,ElemType e) { SlinkNode* p,*t; if (pos <1 || pos > Length(h)) { return 0; } t = (SlinkNode*)malloc(sizeof(SlinkNode)); t->data = e; p = h; while(--pos && p) { p = p->next; } if(p) { t->next = p->next; p->next = t; } return h; } //10.删除pos位置的元素 SlinkNode* DeleteEleAt(SlinkNode* h,int pos) { SlinkNode* p,*t; if (pos<1 || pos >Length(h)) { return h; } p = h; t = p->next; while(--pos && t) { p = t; t = t->next; } p->next = t->next; free(t); t = 0; return h; } void FreeList(SlinkNode* h) { SlinkNode* p; while(h) { p = h->next; free(h);h=0; h = p; } } int main() { SlinkNode* h = 0; int i; ElemType ch; char zm[]={'a','b','c','d','e'}; char sz[]={'1','2','3'}; //初始化单链表h h = InitLink(h); //尾插法插入 for(i=0;i<5;i++) h = InsertLinkTail(h,zm[i]); //输出单链表 showList(h); //头插法插入1 2 3 for(i=0;i<3;i++) h = InsertHead(h,sz[i]); printf("链表长度:%d\n",Length(h)); printf("显示链表:"); showList(h); //显示序号为3的元素 GetElement(h,3,&ch); printf("序号为3的元素:%c\n",ch); //'a'的位置 i = GetElePos(h,'a'); printf("a的位置:%d\n",i); //在第4位置插入* h = InsertAt(h,4,'*'); //显示链表 printf("在第4个位置插入*后链表数据:"); showList(h); //删除第3个元素 h = DeleteEleAt(h,3); //显示链表 printf("删除第3个元素后链表数据:"); showList(h); //释放链表 FreeList(h); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?