数据结构:单链表 C++实现

#include<iostream>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
//定义ListNode类
typedef struct ListNode
{
int data;
struct ListNode *link;
}ListNode;


//创建链表


ListNode *create()
{
//定义头结点、当前结点、备份结点指针
ListNode *head, *p, *s;
//结点个数
int i=0;
//输入值
int x = 0;
head = (ListNode *)malloc(sizeof(ListNode));
cout << "please enter the  serial,end with '0'"<<endl;
while (1)
{
cin >> x;
if (0 == x)break;
p = (ListNode *)malloc(sizeof(ListNode));
p->data = x;//->代表指针p指向data的那部分
if (1 == ++i)
head->link = p;
else
s->link = p;
s = p;
}
return head;
}


//插入
ListNode *insert(ListNode *List)
{
ListNode *p, *s, *p1;//p1给现在的插入数据分配的结点
int i = 0;
int x = 0;
int k, num;
p1 = (ListNode *)malloc(sizeof(ListNode));
cout << "please enter the n" << endl;
cin >> k;
cout << "please enter the num" << endl;
cin >> num;
p1->data = num;
for (i = 0; i <= k; i++)
{
p = (ListNode *)malloc(sizeof(ListNode));
if (0 == k)
{
p = List;//先保存原头指针指向的下一结点位置
}
else 
p = List->link;
}
s = p->link;//先保存原头指针指向的下一结点位置
p->link = p1;
p1->link = s;
return List;
}
void print(ListNode *List)
{
int i = 0;
ListNode *p;//p1给现在的插入数据分配的结点
p = List;//取链表头指针


cout << "链表存入的值为:" << endl;
while (p!=NULL)
{
p = p->link;
cout << p->data;
}
if (i == 0)
{
cout << "error" << endl;
}
}


int main(int *argc, int argv[])
{
ListNode *List;//此处List是结构体头指针
int choice;
int com=1;
while (com)
{
cout << "please enter the number of command" << endl;
cin >> choice;
switch (choice)
{
case 1:

List = create();//结构体List存储的是head
break;
case 2:
//先定义需要插入的序号和值
List = insert(List);
break;
case 3:
print(List);
}
cout << "If you want to exit,enter '0'" << endl;
cin>>com;
}
return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值