链表的基本操作
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE *head=NULL;
/*函数声明*/
NODE *createlist_head(int len);
NODE *createlist_end(int len);
NODE *createlist_sort(int len);
int insert(NODE *newNode,int index);
void insert_sort(NODE *newNode);
void display(NODE *p);
/*创建新节点*/
NODE *createNewNode()
{
NODE *p;
int c;
scanf("%d",&c);
p=(NODE *)malloc(sizeof(NODE));
p->data=c;
p->next=NULL;
return p;
}
/*链表头部插入*/
NODE *createlist_head(int len)
{
NODE *p;
int i,c;
for (i=0;i<len;i++)
{
p=createNewNode();
p->next=head;
head=p;
}
return head;
}
/*链表尾部插入*/
NODE *createlist_end(int len)
{
NODE *p,*tail=head;
int c,i;
for (i=0;i<len;i++)
{
p=createNewNode();
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
/*按data成员值大小排序插入*/
NODE *createlist_sort(int len)
{
NODE *p;
int c,i;
for (i=0;i<len;i++)
{
p=createNewNode();
insert_sort(p);
}
return head;
}
/*按指定位置进行插入*/
int insert(NODE *newNode,int index)
{
int i=0;
NODE *p;
p=head;
while (p!=NULL&&i<index-1)
{
p=p->next;
i++;
}
if(p==NULL)
return 0;
else
{
newNode->next=p->next;
p->next=newNode;
return 1;
}
}
/*按data成员值的大小排序插入*/
void insert_sort(NODE *newNode)
{
NODE *p1,*p2; //p1,p2记录指标指针位置,一前一后
p1=p2=head;
while (p1!=NULL)
{
if (p1->data<newNode->data) //成员值比较
{
p2=p1;
p1=p1->next;
}
else
break;
}
/*以下代码处理新节点插入位置的各种情况*/
if(head==NULL) //如果头结点为空,即链表空
head=newNode;
else if(p1==NULL) //如果到达链表尾部
p2->next=newNode;
else if(p1==head) //如果p1指向头结点
{
newNode->next=p1;
head=newNode;
}
else //如果p1指向中间节点
{
newNode->next=p1;
p2->next=newNode;
}
}
/*显示链表内容*/
void display(NODE *p)
{
NODE *q;
q=p;
while(q!=NULL)
{
printf("%d\n",q->data);
q=q->next;
}
// while (p!=NULL)
// {
// q=p;
// p=p->next;
// free(q);
// }
}
NODE *del(int index)
{
NODE *p,*q;
int i=0;
p=head;
while (p->next!=NULL&&i<index-1)
{
p=p->next;
i++;
}
if(p->next==NULL)
return NULL;
else
{
q=p->next;
p->next=q->next;
return q;
}
}
NODE *search(char value)
{
NODE *p;
p=head;
while(p!=NULL&&p->data!=value)
p=p->next;
return p;
}
void main()
{
int flag;
NODE *p;
// display(createlist_sort(5));
// display(createlist_head(5));
display(createlist_end(5));
p=createNewNode();
flag=insert(p,3);
if(flag)
printf("插入成功!\n");
else
printf("插入失败!\n");
display(head);
free(del(3));
display(head);
}
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE *head=NULL;
/*函数声明*/
NODE *createlist_head(int len);
NODE *createlist_end(int len);
NODE *createlist_sort(int len);
int insert(NODE *newNode,int index);
void insert_sort(NODE *newNode);
void display(NODE *p);
/*创建新节点*/
NODE *createNewNode()
{
NODE *p;
int c;
scanf("%d",&c);
p=(NODE *)malloc(sizeof(NODE));
p->data=c;
p->next=NULL;
return p;
}
/*链表头部插入*/
NODE *createlist_head(int len)
{
NODE *p;
int i,c;
for (i=0;i<len;i++)
{
p=createNewNode();
p->next=head;
head=p;
}
return head;
}
/*链表尾部插入*/
NODE *createlist_end(int len)
{
NODE *p,*tail=head;
int c,i;
for (i=0;i<len;i++)
{
p=createNewNode();
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
/*按data成员值大小排序插入*/
NODE *createlist_sort(int len)
{
NODE *p;
int c,i;
for (i=0;i<len;i++)
{
p=createNewNode();
insert_sort(p);
}
return head;
}
/*按指定位置进行插入*/
int insert(NODE *newNode,int index)
{
int i=0;
NODE *p;
p=head;
while (p!=NULL&&i<index-1)
{
p=p->next;
i++;
}
if(p==NULL)
return 0;
else
{
newNode->next=p->next;
p->next=newNode;
return 1;
}
}
/*按data成员值的大小排序插入*/
void insert_sort(NODE *newNode)
{
NODE *p1,*p2; //p1,p2记录指标指针位置,一前一后
p1=p2=head;
while (p1!=NULL)
{
if (p1->data<newNode->data) //成员值比较
{
p2=p1;
p1=p1->next;
}
else
break;
}
/*以下代码处理新节点插入位置的各种情况*/
if(head==NULL) //如果头结点为空,即链表空
head=newNode;
else if(p1==NULL) //如果到达链表尾部
p2->next=newNode;
else if(p1==head) //如果p1指向头结点
{
newNode->next=p1;
head=newNode;
}
else //如果p1指向中间节点
{
newNode->next=p1;
p2->next=newNode;
}
}
/*显示链表内容*/
void display(NODE *p)
{
NODE *q;
q=p;
while(q!=NULL)
{
printf("%d\n",q->data);
q=q->next;
}
// while (p!=NULL)
// {
// q=p;
// p=p->next;
// free(q);
// }
}
NODE *del(int index)
{
NODE *p,*q;
int i=0;
p=head;
while (p->next!=NULL&&i<index-1)
{
p=p->next;
i++;
}
if(p->next==NULL)
return NULL;
else
{
q=p->next;
p->next=q->next;
return q;
}
}
NODE *search(char value)
{
NODE *p;
p=head;
while(p!=NULL&&p->data!=value)
p=p->next;
return p;
}
void main()
{
int flag;
NODE *p;
// display(createlist_sort(5));
// display(createlist_head(5));
display(createlist_end(5));
p=createNewNode();
flag=insert(p,3);
if(flag)
printf("插入成功!\n");
else
printf("插入失败!\n");
display(head);
free(del(3));
display(head);
}