关于链表的问题
好长时间没敲了都忘的差不多了
不知道为什么会这样 是我写错了吗
能说详细点吗
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//关于ElemType:它是element type(“元素的类型”)的简化体。
//可以是任何数据类型,这里是int型
typedef struct Node
{
int data;
struct Node * next;
}Node;
typedef struct Node* LinkList;
//link:链接 list:目录
int GetElem (LinkList L,int i,int *e);
//返回链表L第i个数据
int ListInsert (LinkList L,int i,int e);
//将元素e插入链表L的第i个位置
int ListDelete (LinkList L,int i,int *e);
//删除链表L的第i个位置的数值,并用e返回其值
LinkList CreateListHead ();
//创建一个链表——头插法
int main (void)
{
LinkList *L;
LinkList CreateListHead(&L,3);
return 0;
}
int GetElem (LinkList L,int i,int *e)
{
int j;
LinkList p = L->next;
for(j = 1;p && j <= i;j++)
//吧‘p’放在判定结果里,如果‘p’为NULL,那么‘&&’返回为0,程序结束
//这样的好处就是省去了一次if判定
{
p = p->next;
}
if( !p || j>i )
{
return 0;
}
*e = p->data;
return 1;
}
int ListInsert (LinkList L,int i,int e)
{
int j;
LinkList _new;
LinkList p = L->next;
while( p && j<i )
{
p = p->next;
j++;
}
if( !p || j>i )
{
return 0;
}
_new = (LinkList)malloc(sizeof(Node));
_new->data = e;
_new->next = p->next;
p->next = _new;
return 1;
}
int ListDelete (LinkList L,int i,int *e)
{
int j;
LinkList p = L;
for(j = 0;j < i && p;j++)
{
p = p->next;
}
if( !(p->next) || j>i )
{
return 0;
}
p = p->next->next;
*e = p->next->data;
free(p->next);
return 1;
}
LinkList CreateListHead( LinkList *L,int number )
{
LinkList p;
int newdata;
(*L) = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for( int i = 1;i < number;i++ )
{
p = (LinkList)malloc(sizeof(Node));
scanf("%d",&newdata);
p -> data = newdata;
p -> next = (*L)->next;
(*L) -> next = p;
}
}
In function 'main':
expected declaration specifiers or '...' before '&' token
expected declaration specifiers or '...' before numeric constant
//通过传递指针的指针返回结果,不需要返回值,因此声明成void
void CreateListHead(LinkList *L,int number );
int main (void)
{
//LinkList 定义的本身是个指针,LinkList * 则是指针的指针
//这里应该是LinkList
//LinkList * L;
LinkList L;
//指针的指针再取址就是指针的指针的指针了。
CreateListHead(&L,3);
return 0;
}
/*
函数的定义要和函数声明同形
你的定义个声明不同形
LinkList CreateListHead ();
LinkList CreateListHead( LinkList *L,int number )
*/
void CreateListHead(LinkList *L,int number )
{
LinkList p;
int newdata;
(*L) = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for( int i = 1;i < number;i++ )
{
p = (LinkList)malloc(sizeof(Node));
scanf("%d",&newdata);
p -> data = newdata;
p -> next = (*L)->next;
(*L) -> next = p;
}
} #include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//关于ElemType:它是element type(“元素的类型”)的简化体。
//可以是任何数据类型,这里是int型
typedef struct Node
{
int data;
struct Node * next;
} Node ;
typedef struct Node* LinkList;
//link:链接 list:目录
void GetElem (LinkList L , int i , int * e)
{
int k ;
LinkList p ;
* e = -1 ;
if(L && i > 0) {
for(k = 1 , p = L ; p -> next && k < i ; k ++ , p = p -> next) ;
if(k == i) * e = p -> data ;
}
}
void ListInsert(LinkList L , int i , int e)
{
int k ;
LinkList p , r ;
if(L && i > 0) {
for(k = 1 , r = L ; r -> next && k < i ; k ++ , r = r -> next) ;
p = (LinkList) malloc(sizeof(Node)) ;
p -> data = r -> data ;
p -> next = r -> next ;
r -> data = e ;
r -> next = p ;
}
}
LinkList ListDelete(LinkList L , int i , int * e)
{
int k ;
LinkList h , p , r ;
* e = -1 ;
h = L ;
if(L && i > 0) {
for(p = r = L , k = 1 ; p -> next && k < i ; r = p , p = p -> next , k ++) ;
if(k == i) {
* e = p -> data ;
if(p == L) h = p -> next ;
else r -> next = p -> next ;
free(p) ;
}
}
return h ;
}
void CreateListHead(LinkList * L , int number)
{
LinkList h , p , r ;
int i ;
for(i = 0 ; i < number ; i ++ )
{
p = (LinkList) malloc(sizeof(Node)) ;
p -> next = NULL ;
scanf("%d" , & p -> data) ;
if(! i) h = p ;
else r -> next = p ;
r = p ;
}
* L = h ;
}
void ShowList(LinkList L)
{
if(L) {
printf("%d" , L -> data) ;
for(L = L -> next ; L ; L = L -> next) printf(" , %d" , L -> data) ;
printf("\n\n") ;
} else {
printf("链表为空。\n") ;
}
}
int main(void)
{
LinkList L ;
int e ;
CreateListHead(& L ,3) ;
ShowList(L) ;
ListInsert(L , 3 , 404) ;
ShowList(L) ;
ListInsert(L , 1 , 808) ;
ShowList(L) ;
L = ListDelete(L , 3 , & e) ;
ShowList(L) ;
L = ListDelete(L , 1 , & e) ;
ShowList(L) ;
}
编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
101
202
303
101 , 202 , 303
101 , 202 , 404 , 303
808 , 101 , 202 , 404 , 303
808 , 101 , 404 , 303
101 , 404 , 303
D:\0002.Exercise\C>
页:
[1]