数据结构上机实验:单链表操作
来源:互联网 发布:电脑网络连接不上 编辑:程序博客网 时间:2024/05/20 06:51
#include <iostream>#include <malloc.h>using namespace std;typedef struct Node{ char c; struct Node *next;}*LinkList,LNode;//初始化单链表hLinkList Init(LinkList &h){ h=(LNode*)malloc(sizeof(LNode)); if(h==NULL) { cout<<"没有足够的内存空间"<<endl; exit(0); } h->next=NULL; return h;}//尾差法插入元素void InsertNum(LinkList &h,int n){ LinkList r,s; r=h; for(int i=0;i<n;i++) { s=(LNode*)malloc(sizeof(LNode)); r->next=s; cin>>s->c; r=s; } r->next=NULL;}//输出单链表hvoid outputLinkList(LinkList h){ LinkList p=h->next; while(p!=NULL) { cout<<p->c<<" "; p=p->next; }}//求单链表h的长度int GetLength(LinkList h){ LinkList p; p=h->next; int count=0; while(p!=NULL) { count++; p=p->next; } return count;}//输出单链表的长度void outputListLength(LinkList h){ cout<<"当前链表的长度为: "<<GetLength(h)<<endl;}//判断单链表h是否为空表void Empty(LinkList h){ if (h->next==NULL) cout<<"该链表为空!"<<endl; else cout<<"该链表不为空!"<<endl;}//输出单链表h的第n个元素void outputNthNum(LinkList h,int n){ int curLen=GetLength(h); if(n<=0||n>curLen) { cout<<"位置输入错误!"<<endl; exit(0); } else { LinkList p=h->next; for(int i=1;i<n;i++) { p=p->next; } cout<<"该链表的第"<<n<<"个元素为: "<<p->c<<endl; }}//输出元素a的位置void outputNumPosition(LinkList h,char a){ LinkList p=h->next; int position=1; while(p!=NULL) { if(p->c==a) { cout<<"元素"<<a<<"在链表中的位置为 :"<<position<<endl; } p=p->next; position++; } if(position-GetLength(h)>1) cout<<"元素"<<a<<"在链表中不存在!"<<endl;}//在第N个位置上插入元素fvoid InsertNumOnth(LinkList &h,int n,char a){ int len=GetLength(h); if(n<=0||n>len) { cout<<"位置错误,不能插入!"<<endl; exit(0); } else { LinkList p=h->next; LinkList temp; temp=(LNode*)malloc(sizeof(LNode)); if(n==1) { temp->next=p; h->next=temp; temp->c=a; } else { for(int i=2;i<n;i++) { p=p->next; } temp->next=p->next;//3 p->next=temp; temp->c=a; } }}//删除链表的第n个元素void deleteNthNum(LinkList &h,int n){ if(n<=0||n>GetLength(h)) { cout<<"删除位置输入错误!"<<endl; exit(0); } else { int j=0; LinkList p=h,q; while(j<n-1&&p!=NULL) { j++; p=p->next; } q=p->next; p->next=q->next; free(q); }}//释放链表void freeList(LinkList &h){ free(h);}int main(){ LinkList h; cout<<"欢迎进入单链表操作程序,本程序提供以下操作:"<<endl; cout<<endl; cout<<"1.初始化链表 2.插入n个元素 3.输出单链表"<<endl; cout<<"4.输出单链表的长度 5.输出链表的第n个元素 6.输出元素a的位置"<<endl; cout<<"7.判断链表是否为空 8.在第n个位置插入元素f 9.删除第n个元素"<<endl; cout<<endl; cout<<"输入数字1~8选择您的操作,输入0退出本系统!(为保证程序顺利运行,已默认执行初始化操作)"<<endl; cout<<"请输入数字:"<<endl; int op; Init(h); while(cin>>op&&op) { switch(op) { case 2: { int n; cout<<"输入n的值:";cin>>n; cout<<"输入插入的n个数的值:"; InsertNum(h,n); cout<<"插入成功!"<<endl; break; } case 3: { cout<<"当前链表为:"; outputLinkList(h); cout<<endl;break; } case 4: { outputListLength(h);break; } case 5: { int n; cout<<"输入n的值:";cin>>n; outputNthNum(h,n);break; } case 6: { char a; cout<<"输入a的值:";cin>>a; outputNumPosition(h,a);break; } case 7: { Empty(h);break; } case 8: { int n;char f; cout<<"输入n的值: ";cin>>n; cout<<"输入f的值: ";cin>>f; InsertNumOnth(h,n,f); cout<<"插入成功!"<<endl; break; } case 9: { int n; cout<<"输入n的值: ";cin>>n; deleteNthNum(h,n); cout<<"删除成功!"<<endl; break; } } } return 0;}
运行:
0 0
- 数据结构上机实验:单链表操作
- 数据结构上机实验学习体会
- 数据结构上机之实验查找
- 数据结构 第二次上机 实验二
- 数据结构上机实验(二)
- 数据结构第四章上机实验
- 数据结构--上机实验实验要求:二叉排序树【拓展】
- 数据结构上机实验之二分查找
- SDUT 数据结构上机实验之二分查找
- 数据结构上机实验之二分查找
- 数据结构上机实验之二分查找
- 数据结构上机实验之二分查找
- 数据结构上机实验之二分查找
- [2039]数据结构上机实验之二分查找
- 数据结构 顺序表 上机实验 1
- sdut数据结构上机实验之二分查找
- sdut数据结构上机实验之顺序查找
- 数据结构上机实验之二分查找
- 编程菜鸟第一篇博客
- 如何将GPT格式的硬盘转换为MBR
- c笔试面试 之 不用加法操作(用逻辑运算)实现两个正整数的除法
- getchar与getch和getche的区别
- [笔记]Ubuntu 12.04 安装JDK 7
- 数据结构上机实验:单链表操作
- LATEX转成WORD (on Windows 7)
- 【WebRTC】起步:安装编译
- 用c得到格式化的时间-实例
- iOS study Day 2
- zoj 3603 Draw Something Cheat(模拟)
- C#之索引器
- CodeForce 126B
- shell 学习(1) 执行,管道,重定向,逻辑分隔,变量,引号,运算