数据结构之链表
Posted huxiaojing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之链表相关的知识,希望对你有一定的参考价值。
书上的数据结构用到了C++,这是用C语言编写的链表
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int datatype;
typedef struct ListNode
{
datatype data;
struct ListNode *next;
}node;
/*头插法建立单链表*/
node* creat()
{ int h;
node *head;
for(int i=0;i<2;i++)
{
int j;
scanf("%d",&j);
if(i==0){
head=(node *)malloc(sizeof(node));
head->data = j;
head->next = NULL;
continue;
}
node *pnew=(node *)malloc(sizeof(node));
pnew->data=j;
pnew->next=head;
head = pnew;
}
return head;
}
void PrintList(node *head)//打印链表
{
node *current = head;
while(current!= NULL){
printf("%d ", current->data);
current = current->next;
}
}
void findnode(node *head)
{
printf("请输入你要查找的整数:\n");
int i;
scanf("%d",&i);
node *current=head;
while(current!=NULL&¤t->data!=i)
{
current=current->next;
}
if(current!=NULL)
{printf("已找到");}
else{
printf("找不到");
}
}
node* insert(node *head)
{
int i;
int j;
node *current1;
printf("请输入你要插入的位置:\n");
scanf("%d", &i);
printf("请输入你想插入的数值:\n");
scanf("%d", &j);
node *current=head;
if(i<1&&i>19)
{
printf("插入位置错误");
}
else if(i==1)
{
node *new2=(node *)malloc(sizeof(node));
new2->data=j;
new2->next=head;
head = new2;
}
else{
for(int h=1;h<i;h++)
{ current1=current;
current=current->next;//找到插入的位置嗯
}
node *newnode=(node *)malloc(sizeof(node));
newnode->data=j;
newnode->next=current1->next;
current1->next=newnode;
}
return head;
}
node *delenode(node *head)
{
int i;
node *current1;
printf("请输入你想删除的位置:\n");
scanf("%d",&i);
node *current=head;
node *pnew;
node *pnew2;
if(i==0)
{
pnew=head->next;
pnew2=head;
head=pnew;
free(pnew2);
}
else
{
for(int j=0;j<i;j++)
{
current1=current;
current=current->next;
}
current1->next=current->next;
free(current);
}
return head;
}
int main()
{
node *nono=creat();
printf("生成的新链表为:\n");
PrintList(nono);
findnode(nono);
node *head2=insert(nono);
PrintList(head2);
node *head3=delenode(head2);
PrintList(head3);
return 0;
}
以上是关于数据结构之链表的主要内容,如果未能解决你的问题,请参考以下文章