单链表的建立,查找,插入,删除,测长,打印,逆置操作实现
2018-03-22 19:59
751 查看
#include<iostream> #include<stdio.h> #include<string.h> #include<conio.h> using namespace std; typedef struct student { int data; struct student *next; }node; //建立单链表,头插入法; node *creatlist() { node *head, *p, *s; int x; //申请新的存储空间,创立头节点; head = (node*)malloc(sizeof(node)); head->next=NULL; //重要 指针需要初始化; s = head->next; cout << "用头插法建立单链表, 请输入链表数据, 以 ctrl+z 结束" << endl; while ( cin>>x) { p = (node*)malloc(sizeof(node)); p->data = x; head->next = p; p->next = s; s = p; } return(head); } 2. 单链表中节点的查找操作//查找给定的值; node *locate(node *head, int x) { node *p; p = head->next; while (p != NULL && p->data != x) { p=p->next; } if (p == NULL) cout << "链表中不存在这个数" << endl; return (p); }3. 单链表上的插入操作//单链表插入操作;在链表的p节点后插入x; void insert(node *p, int x) { node *q; q = (node*)malloc(sizeof(node*)); q->data = x; q->next = p->next; p->next = q; }4. 单链表上的删除操作//单链表的删除:p指向需要删除的节点,q为跟踪节点,指向被删除的直接前驱节点; void deletelist(node *head, int x) //需要从头开始找; { node *p, *q; q = head; p = q->next;//容易忘记; while (p != NULL && p->data != x) { q = p; p = p->next; } if (p == NULL) { cout << "找不到需要删除的节点" << endl; } else { q->next = p->next; free(p); } }
5. 单链表上的测长操作//单链表测长; int length(node *head) { node *p; int n = 0; p = head; while (p != NULL) { p = p->next; n++; } return(n); }
6. 单链表上的打印操作//单链表打印; void print(node *head) { node *p; p = head->next; cout << "当前单链表的具体数据为:" << endl; while (p != NULL) { //p = p->next; cout << p->data << endl; p = p->next; } //cout << endl; }
7. 单链表上的逆置操作
//单链表的就地逆置: node* ReverseList(node* pHead) { if (pHead == NULL || pHead->next == NULL) { return pHead; } node* pRev = NULL; node* pCur = pHead; while (pCur != NULL) { node* pTemp = pCur; // 步骤① pCur = pCur->next; // 步骤② pTemp->next = pRev; // 步骤③ pRev = pTemp; } return pRev; }最后是main函数;
int main() { node *head,*pRev; head = creatlist(); //建立单链表; cout<<locate(head, 5)<<endl; //查找元素5的位置; insert(head, 88); //在表头插入88; deletelist(head, 7); //在链表中删除元素7; cout << length(head) << endl; //单链表测长; print(head); //打印链表; pRev=ReverseList(head); //就地逆置; print(pRev); system("pause"); return 0; }
相关文章推荐
- 单链表的建立、测长、删除、插入、排序、逆置及打印(数据结构)
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 用JAVA语言,编写一个链表类(双向链表),实现插入,删除,查找操作
- 链表操作综合练习(创建、拆分、插入、删除、合并、打印、逆置)
- 使用JAVA实现单链表的建立、测长、打印、删除、插入、排序、逆置
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- (1)顺序表的操作 ① 输入一组整型元素序列,建立线性表的顺序存储结构。 ② 实现该线性表的遍历。 ③ 在该顺序表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该顺序表中删除或插入指
- 单向链表的建立、打印、查找、插入、删除
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 实现单向循环链表的创建、测长、打印、插入、删除及逆置
- c++实现双向链表的建立,插入,删除,合并,打印
- 线性表的链式存储格式基本操作:创建链表、插入、删除、查找、求表长、打印链表
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 链表的基本操作,建立,测长,删除,打印,插入
- 链表基本操作(建立、修改,插入、删除、打印)
- C语言实现带头结点的链表的创建、查找、插入、删除操作