⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a.cpp

📁 数据库单链表的操作 1。插入 2。删除 3。显示
💻 CPP
字号:
#include<iostream.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct LNode{
   char data;
   LNode *next;
}LNode,*LinkList;



void showmenu(){   //功能列表      
cout<<endl <<"   **********功能**********"<<endl
<<"   * 1.输出单链表的全部数据*"<<endl
<<"   * 2.查找链表元素      *"<<endl
<<"   * 3.链表插入元素      *"<<endl
<<"   * 4.链表删除元素      *"<<endl
<<"   * 5.结束              *"<<endl
<<"   ************************"<<endl
<<"请输入所需功能: ";
}

//*******查看输入的全部数据*********   
void PrintList(LinkList L){
LinkList p;          
cout<<endl<<"你输入的数据为: "; 
p=L->next;           //从头结点开始扫描
while(p){     //顺指针向后扫描,直到p->next为NULL或i=j为止
cout<<p->data;                        
p=p->next; }   
cout<<endl; }

//逆序输入 n 个数据元素,建立带头结点的单链表
void CreateList_L(LinkList &L, int n) {
int i;
LinkList p;
L = new LNode;    
L->next = NULL;      // 先建立一个带头结点的单链表
cout<<"逆序输入 n 个数据元素,建立带头结点的单链表"<<endl;
for (i = n; i > 0; --i) {
    p = new LNode;
    cin>>p->data;    // 输入元素值
    p->next = L->next; L->next = p; // 插入
}
}

// L是带头结点的链表的头指针,以 e 返回第 i 个元素
int GetElem_L(LinkList L, int i, char &e) {
int j;
LinkList p;
p = L->next;   j = 1; // p指向第一个结点,j为计数器
while (p && j<i) { p = p->next; ++j; }    // 顺指针向后查找,直到 p 指向第 i 个元素或 p 为空
if ( !p || j>i )
    return ERROR;      // 第 i 个元素不存在
e = p->data;                 // 取得第 i 个元素
return OK;
}

// 本算法在链表中第i 个结点之前插入新的元素 e
int ListInsert_L(LinkList L, int i, ElemType e) {
int j;
LinkList p,s;
p = L;    j = 0;
while (p && j < i-1) 
     { p = p->next; ++j; }   // 寻找第 i-1 个结点
if (!p || j > i-1)
      return ERROR;      // i 大于表长或者小于1 
s = new LNode;      // 生成新结点
if ( s == NULL) return ERROR;
s->data = e; 
s->next = p->next;      p->next = s; // 插入
return OK;
}

int ListDelete_L(LinkList L, int i, char &e) 
{LinkList p,q;
int j;
p = L;    j = 0;
while (p->next && j < i-1) { p = p->next;   ++j; } 
                           // 寻找第 i 个结点,并令 p 指向其前趋

if (!(p->next) || j > i-1) 
    return ERROR; // 删除位置不合理
q = p->next;   p->next = q->next; // 删除并释放结点
e = q->data;   free(q);
return OK;
}
void main()
{LinkList L;
int n,choice,i;
char e;

cout<<"请输入链表中元素的个数";
cin>>n;
CreateList_L(L, n);
showmenu();   //功能列表   
cin>>choice;        
while(choice!=5)
{ //输入时候退出程序
switch(choice){
    case 1:PrintList(L);break; //1.查看输入的全部数据
    case 2:{
     cout<<"输入你要查找的元素的位置: ";
           cin>>i;GetElem_L(L, i, e);
     cout<<"第"<<i<<"个元素的值是"<<e<<endl;
     break;} //2.查找链表元素         
    case 3:
     {cout<<"请输入你要插入元素的位置i: ";
      cin>>i;
   cout<<endl<<"请输入你要插入元素的值: ";
   cin>>e;
   ListInsert_L(L, i,e);
      break;}       //3.链表插入元素
    case 4:
    {cout<<"请输入你要删除元素的位置";
     cin>>i;
     ListDelete_L(L, i, e) ;
     break;} //4.链表删除元素
    default:cout<<"输入错误,请输入-5,输入重显示功能表^_^ "<<endl;
}
cout<<endl<<"输入功能序号:";    
cin>>choice;
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -