链表头插怎么插呀?
代码一直跑不起来
可以帮忙改一下代码?
#include
#include
#define MaxSize 100
#define ElemType int
#define Status int
typedef struct LNode
{
ElemType data;//数据域
struct LNode* next;//指针域
}LNode, * LinkList;
//**************************基本操作函数***************************//
//初始化函数
Status InitList(LinkList& L)
{
L = new LNode;//生成头结点 这样删除等操作就不必分第一个结点和其他了
L->next = NULL;
return 1;
}
//获取单链表长度 头结点无数据,不算
int CreatList(LinkList &L,int i)
{
LinkList p = L->next;
for (int j = 1; j < i; j++)//循环创建结点
{
p= new LNode;
scanf_s("%d", &p->data);
p->next=L->next;
L->next = p;
}
return 1;
}
int ListLength(LinkList L)
{
LinkList p = L; int sum = 0;
while (p)
{
sum++;
p = p->next;
}
return sum - 1;//去除头结点
}
//插入函数--后插法 插入到第i(1<=i<=length+1)个位置 即i-1之后 不必区分i的位置
Status ListInsert(LinkList& L, int i, ElemType e)
{
LNode* s; LinkList p = L; int j = 0;
while (p && (j < i - 1))//j指到i-1位置或者p已经到最后时跳出
{
p = p->next;
++j;
}
if (!p || j > i - 1)//i<1或者i>ListLength(L)+1时,插入位置无效 不调用ListLength,提高效率
{
printf("插入位置无效!!!\n");
return false;
}
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
//删除函数 删除位置i的结点 即删除i-1之后的结点
Status ListDelete(LinkList& L, int i)
{
LNode* s; LinkList p = L; int j = 0;
LinkList q;
while (p->next && (j < i - 1))//j指到i-1位置
{
p = p->next;
++j;
}
if (!(p->next) || j > i - 1)//i<1或者i>ListLength(L)时,删除位置无效
{
printf("删除位置无效!!!\n");
return false;
}
q = p->next;
p->next = q->next;
free(q);//释放空间
return true;
}
//查找函数 按值查找 查找第一个等于e的结点 成功返回该结点指针,否则返回NULL
LNode* LocateElem(LinkList L, ElemType e)
{
LinkList p;
p= L->next;
while (p && (p->data != e))
{
p = p->next;
}
return p;
}
//**************************功能实现函数**************************//
//遍历输出函数
void PrintList(LinkList L)
{
LinkList p = L->next;//跳过头结点
if (ListLength(L))
{
printf("当前单链表所有元素:");
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
else
{
printf("当前单链表已空!\n");
}
}
//插入功能函数 调用ListInsert后插
void Create(LinkList L)
{
int i; ElemType e; bool flag;
printf("请输入要创建的顺序表长度:");
scanf_s("%d", &i);
printf("请输入%d个数:",i);
flag = CreatList(L, i);
if (flag) {
printf("创建成功!\n");
PrintList(L);
}
else printf("输入长度错误!\n");
}
void Insert(LinkList& L)
{
int place; ElemType e; bool flag;
printf("请输入要插入的位置(从1开始)及元素:\n");
scanf_s("%d%d", &place, &e);
flag = ListInsert(L, place, e);
if (flag)
{
printf("插入成功!!!\n");
PrintList(L);
}
}
//删除功能函数 调用ListDelete删除
void Delete(LinkList L)
{
int place; bool flag;
printf("请输入要删除的位置(从1开始):\n");
scanf_s("%d", &place);
flag = ListDelete(L, place);
if (flag)
{
printf("删除成功!!!\n");
PrintList(L);
}
}
//查找功能函数 调用LocateElem查找
void Search(LinkList L)
{
ElemType e; LNode* q;
printf("请输入要查找的值:\n");
scanf_s("%d", &e);
q = LocateElem(L, e);
if (q)
{
printf("找到该元素!\n");
}
else
printf("未找到该元素!\n");
}
//菜单
void menu()
{
printf("********1.插入 2.删除*********\n");
printf("********3.查找 4.输出*********\n");
printf("********5.退出 5.创建*********\n");
}
//主函数
int main()
{
LinkList L; int choice;
InitList(L);
while (1)
{
menu();
printf("请输入菜单序号:\n");
scanf_s("%d", &choice);
if (choice == 5) break;
switch (choice)
{
case 1:Insert(L); break;
case 2:Delete(L); break;
case 3:Search(L); break;
case 4:PrintList(L); break;
case 5:Create(L); break;
default:printf("输入错误!!!\n");
}
}
return 0;
}
s = new LNode;
这语法都不对,你都不看错误信息的吗,根据错误信息一个一个的改呀
//代码参考自菜鸟教程
#include<stdio.h>
int call_back_1()
{
printf("Hello, this is Callback_1 \n");
return 0;
}
int call_back_2()
{
printf("Hello, this is Callback_2 \n");
return 0;
}
int call_back_3()
{
printf("Hello, this is Callback_3 \n");
return 0;
}
int Handle(int (*Callback)())
{
Callback();
}
int main()
{
Handle(call_back_1);
Handle(call_back_2);
Handle(call_back_3);
return 0;
}
函数运行结果如下:
Hello, this is Callback_1
Hello, this is Callback_2
Hello, this is Callback_3