1、首先是定义一个这样的函数,名称为【SeqSearch】,返回值为Int。
2、接下来就可以,传入一个数组,一个长度,和一个查找的值。
3、此时,就能从零开始到长度减一个个判断。
4、此时,可以判断,如果找到了就返回当前下标加一。
5、否则就让这个函数返回负一。
6、此时,可以在Main函数中配合运行测试。
7、输出对于每次删除 *** 作输出一行,如果k不合法(k大于n或者k为0),输出 -1, 否则输出删除的元素。
线性表实际上就是一个数组,清空 *** 作就意味着清除数组当前保存的所有元素,表的长度归0,以后的数组插入 *** 作要从0下标元素开始,所以也就不需要再费时去一个一个清除元素值,或者重新分配数组空间了,直接将长度归0就可以了,之后在插入元素时(清空后的第一个 *** 作只能是插入元素,不能取元素或者删除元素)通过表长度判断应该插入到何处(清空后的第一次插入只能放在0下标位置)。所以,书上的说法是正确的,照书上的来就可以了,当然如果定义了一个指针,那么首先要用malloc()等函数分配空间,然后再L->Length=0
#include<stdio.h>struct Link
{
int x
struct Link * next
} node
int len = -1 //现在单链表的总长度
struct Link *Init(void) //创建
{
struct Link *L = (struct Link *)malloc(sizeof(struct Link))
L->next = NULL
return L
}
void Insert(struct Link *head, int n) //插入
{
struct Link *pnew = Init(), *L = head, *P = L
if(n >= len)
{
while(L->next != NULL)
L = L->next
L->next = pnew
}
else
{
while(n--)
{
P = L
L = L->next
}
P->next = pnew
pnew->next = L
}
scanf("%d", &pnew->x)
len++
return
}
void Delete(struct Link *head, int n) //删除
{
struct Link *L = head, *P = L
while(n--)
{
P = L
L = L->next
}
P->next = L->next
len--
return
}
void Position(struct Link *head, int value) //定位
{
struct Link *L = head
int index = 0
while(L->x != value && L->next != NULL)
{
index++
L = L->next
}
printf("在第%d个节点\n", index)
return
}
void Value(struct Link *head, int index) //取值
{
printf("第%d个位置的数是:", index)
struct Link *L = head
while(L->next != NULL && index--)
L = L->next
printf("%d\n", L->x)
return
}
void Len(void) //表长
{
printf("表长 = %d\n", len)
return
}
void Clear(struct Link *head) //清空
{
free(head)
return
}
void Print(struct Link *head) //输出
{
struct Link *L = head->next
while(L -> next != NULL)
{
printf("%d ", L->x)
L = L->next
}
return
}
int main(void)
{
struct Link *head
head = Init()
int i = 0
for(i = 0 i < 10 i++)
{
printf("输入第%d个数:", i + 1)
Insert(head, i)
}
Delete(head, len)
printf("输入要查询的值:")
scanf("%d", &i)
Position(head, i)
Value(head, 7)
Len()
Print(head)
Clear(head)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)