#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Lnode{
int data; //数据域
struct Lnode *next; //指针域
}Lnode,*Linklist; //*Linklist为Lnode类型的指针
Linklist createListR(void)
{
int i=0;
int ch,N;
Linklist *L=(Linklist)malloc(sizeof(Lnode));//建立表头节点分配存储空间
Lnode *q,*r=L;
printf("请输入%d个整数构建单链表:\n",&N);
for(i=0;i<N;i++)
{
scanf("%d",&ch);
q=(Lnode*)malloc(sizeof(Lnode));
q->data=ch;
r->next=q;
r=q; //插到表末端,让r回到最后一个作为末节点。
}
r->next=NULL;
return L;
}
int ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
{
int j;
Lnode *p;
p=L;
j=0;
while(p&&j<i-1)//遍历并且进行第i-1个位置的查找
{
p=p->next;
++j;
}
if(!p||j>i-1)//如果找不到的话就返回error
{
return ERROR;
}
Lnode *S=(Linklist)malloc(sizeof(Lnode));
S->data=e;
S->next=p->next;
p->next=S;
}
int ListDelete(Linklist *L,int i,int *e)//单链表的删除
{
int j;
Lnode *p,*q;
p=L;
j=0;
while(p->next&&j<i-1)//寻找第i-1个元素
{
p=p->next;
++j;
}
if(!p||j>i-1)//删除位置不合理,找不到元素
{
return ERROR;
}
q=p->next;//删除并释放结点
p->next=q->next;
free(q);
}
int main()
{
Linklist createListR(void);
int i,select;
int *e;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));
printf("宏立:请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2\n");
scanf("%d",&select);
if(select==1)
{
ListInsert(L,i,e);
}
if(select==0)
{
ListDelete(L,i,e);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Lnode{
int data; //数据域
struct Lnode *next; //指针域
}Lnode,*Linklist; //*Linklist为Lnode类型的指针
Linklist createListR(void)
{
int i=0;
int ch,N;
Linklist *L=(Linklist)malloc(sizeof(Lnode));//建立表头节点分配存储空间
Lnode *q,*r=L;
printf("请输入%d个整数构建单链表:\n",&N);
for(i=0;i<N;i++)
{
scanf("%d",&ch);
q=(Lnode*)malloc(sizeof(Lnode));
q->data=ch;
r->next=q;
r=q; //插到表末端,让r回到最后一个作为末节点。
}
r->next=NULL;
return L;
}
int ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
{
int j;
Lnode *p;
p=L;
j=0;
while(p&&j<i-1)//遍历并且进行第i-1个位置的查找
{
p=p->next;
++j;
}
if(!p||j>i-1)//如果找不到的话就返回error
{
return ERROR;
}
Lnode *S=(Linklist)malloc(sizeof(Lnode));
S->data=e;
S->next=p->next;
p->next=S;
}
int ListDelete(Linklist *L,int i,int *e)//单链表的删除
{
int j;
Lnode *p,*q;
p=L;
j=0;
while(p->next&&j<i-1)//寻找第i-1个元素
{
p=p->next;
++j;
}
if(!p||j>i-1)//删除位置不合理,找不到元素
{
return ERROR;
}
q=p->next;//删除并释放结点
p->next=q->next;
free(q);
}
int main()
{
Linklist createListR(void);
int i,select;
int *e;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));
printf("请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2\n");
scanf("%d",&select);
if(select==1)
{
ListInsert(L,i,e);
}
if(select==0)
{
ListDelete(L,i,e);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node* next;
}Node, *LinkList;
void InitList(LinkList *L);//初始化空链表
int LengthList(LinkList L);//求链表长度
void TailList(LinkList L);//尾插法建立链表数据
void HeadList(LinkList L);//头插法建立链表数据
int GetData(LinkList L, int i);//获得第i个位置的数据
int GetLocate(LinkList L, int data);//查找第一次出现数据data的位置
void InsList(LinkList L, int i, int data);//在第i个位置插入数据data
void DelList(LinkList L, int i);//删除第i个元素
void DestroyList(LinkList L);//销毁链表L
bool EmptyList(LinkList L);//判断是否为空
void PrintList(LinkList L);//打印链表L
LinkList MergeLinkList(LinkList A, LinkList B);//按从小到大合并链表A,B
int main(){
LinkList head, linkB;
int i, data;
InitList(&head);//head初始化
InitList(&linkB);//linkB初始化
TailList(head);//尾插法建立链表head
HeadList(linkB);//头插法建立链表linkB
printf("尾插法链表如下,长度为%d:\n", LengthList(head));
PrintList(head);//打印链表head
printf("头插法链表如下,长度为%d:\n", LengthList(linkB));
PrintList(linkB);
printf("请输入想查看链表head数据的位置:\n");
scanf("%d", &i);
printf("head链表中第i个位置数据为:%d\n", GetData(head, i));
printf("请输入想查看链表head的数据:\n");
scanf("%d", &data);
printf("head链表中数据为data的第一个位置为:%d\n", GetLocate(head, data));
printf("请输入插入位置以及数据:\n");
scanf("%d %d", &i, &data);
InsList(head, i, data);
PrintList(head);
printf("请输入想删除的数据位置:\n");
scanf("%d", &i);
DelList(head, i);
PrintList(head);
head = MergeLinkList(head, linkB);
PrintList(head);
DestroyList(head);
PrintList(head);
}
void InitList(LinkList *L){//初始化空链表
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
void TailList(LinkList L){//尾插法建立链表
Node *r, *temp;
r = L;
int data;
printf("尾插法建立链表,-1结束\n");
scanf("%d", &data);
while(data != -1){
temp = (Node *)malloc(sizeof(Node));
temp->data = data;
r->next = temp;
r = temp;
scanf("%d", &data);
}
r->next = NULL;
}
void HeadList(LinkList L){//头插法建立链表
Node *h, *temp;
h = L;
int data;
printf("头插法建立链表,-2结束\n");
scanf("%d", &data);
while(data != -2){
temp = (Node *)malloc(sizeof(Node));
temp->data = data;
temp->next = h->next;
h->next = temp;
scanf("%d", &data);
}
}
int LengthList(LinkList L){//返回链表长度,不包括头结点
Node *p = L->next;
int length = 0;
if(EmptyList(L))
printf("空链表!求长错误!\n");
else
while(p != NULL){
length++;
p = p->next;
}
return length;
}
bool EmptyList(LinkList L){//判断单链表是否为空
Node *p = L;
if(L->next == NULL)
return true;
else
return false;
}
int GetData(LinkList L, int i){//获得第i个位置的数据
Node *p = L->next;
int locate = 1;
int data = -1;
if(i <= 0 || i > LengthList(L))
printf("位置不在链表范围!\n");
else{
while(p != NULL){
if(locate == i){
data = p->data;
break;
}else{
p = p->next;
locate++;
}
}
}
return data;
}
int GetLocate(LinkList L, int data){//找第一次出现数据data的位置
int i = 1, locate = -1;
Node *p = L->next;
while(p != NULL){
if(p->data != data){
i++;
p = p->next;
}else{
locate = i;
break;
}
}
if(p == NULL)
printf("该数据未在此链表中出现!\n");
return locate;
}
void InsList(LinkList L, int i, int data){//在第i个位置插入数据data
Node *pre = L, *tmp;
int k = 0;
if(i <= 0 || i > LengthList(L)+1)
printf("插入位置异常,插入操作无效!\n");
else{
while(k++ < i-1)
pre = pre->next;
tmp = (Node *)malloc(sizeof(Node));
tmp->data = data;
tmp->next = pre->next;
pre->next = tmp;
}
}
void DelList(LinkList L, int i){//删除第i个元素
Node *pre = L, *tmp;
int k = 0;
if(i <= 0 || i > LengthList(L))
printf("删除位置异常,删除操作无效!\n");
else{
while(k++ < i-1)
pre = pre->next;
tmp = pre->next;
pre->next = tmp->next;
free(tmp);
}
}
void PrintList(LinkList L){//打印链表L
if(EmptyList(L)){
printf("此链表为空!\n");
}else{
Node *p = L->next;
while(p != NULL){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
}
LinkList MergeLinkList(LinkList A, LinkList B){//按从小到大合并链表A,B
Node *pa, *pb;
LinkList C, r;
pa = A->next;
pb = B->next;
r = C = A;
while(pa != NULL && pb != NULL)
if(pa->data < pb->data){
C->next = pa;
C = pa;
pa = pa->next;
}else{
C->next = pb;
C = pb;
pb = pb->next;
}
if(pa != NULL)
C->next = pa;
else
C->next = pb;
free(B);
return r;
}
void DestroyList(LinkList L){//销毁链表L
L->next = NULL;
}
你代码有问题,你调用创建函数,但是你都没有形参表。。。