单链表的建立,插入,删除,逆置
来源:互联网 发布:图形化编程语言 编辑:程序博客网 时间:2024/06/05 03:24
#include<stdio.h>
#include<stdlib.h>
#define FLAG -1
typedef struct node
{
int data;
struct node *next;
}Node, *Linklist;
/*
Linklist HeadCreat()
{
Linklist H = NULL;
Node *s;
int x = 0;
scanf("%d",&x);
while(x != FLAG)
{
s = (Linklist)malloc(sizeof(Node));
s->data = x;
s->next = H;
H = s;
scanf("%d",&x);
}
return H;
}
*/
Linklist TailCreat()
{
Linklist H = NULL;
Node *s,*t = NULL;
int x = 0;
scanf("%d",&x);
while(x != FLAG)
{
s = (Linklist)malloc(sizeof(Node));
s->data = x;
s->next = NULL;
if(H == NULL)
H = s;
else t->next = s;
t = s;
scanf("%d",&x);
}
if(t != NULL)
t->next = NULL;
return H;
}
int Listlen(Linklist H)
{
int j = 0;
Node *s = H;
if (s == NULL)
return 0;
else
while (s->next)
{
s = s->next;
j++;
}
return j+1;
}
Linklist Locate(Linklist H,int x)
{
Node *before = NULL;
Node *local = H;
while((local) && (local->data < x))
{
before = local;
local = local->next;
}
if((local)&&(before->data < x)&&(local->data > x))
return before;
}
Linklist Insert(Linklist H,int x)
{
Node *p = NULL;
Node *s = NULL;
p = Locate(H,x);
if(p == NULL)
{
printf(" Error!");
return H;
}
else
{
s = (Linklist)malloc(sizeof(Node));
s->data = x;
s->next = p->next;
p->next = s;
return H;
}
}
Node * Get(Linklist H,int i)
{
Node *p = H;
int j=0;
while( (p->next != NULL) && (j<i) )
{
p=p->next;
j++;
}
if(j == i)
return p;
else
return NULL;
}
Linklist Del(Linklist H,int i)
{
Node *p = NULL;
Node *s = NULL;
p = Get(H,i-1);
if (p == NULL)
{
printf("The (i-1)th node is not in! ");
return H;
}
else if(p->next == NULL)
{
printf("The ith node is not in!!");
return H;
}
else
{
s=p->next;
p->next=s->next;
free(s);
return H;
}
}
Linklist Delsame(Linklist H)
{ // 若输入11221133只能输出1213 怎么改可以去掉所有相同的节点
Node *p = NULL;
Node *s = NULL;
Node *t = NULL;
if (H == NULL)
return H;
p = H;
while( p->next)
{
s = p;
t = p->next;
while(s->next)
{
if (s->data == t->data)
{
s->next = t->next;
free(t);
t = s->next;
}
else
{
s = s->next;
t = t->next;
}
}
s = s->next;
if( s == NULL)
return H;
}
}
Linklist Reverse(Linklist H)
{
Node *p_1 = NULL;
Node *p_2 = NULL;
p_1=H;
p_2 = p_1->next;
H = p_2->next;
p_1->next = NULL;
while(H->next)
{
p_2->next = p_1;
p_1 = p_2;
p_2 = H;
H = H->next;
}
H->next = p_2;
p_2->next = p_1;
return H;
}
void print(Linklist H)
{
Linklist p = NULL;
p = H;
while(p)
{
printf("<<%d>>",p->data);
p=p->next;
}
}
int main()
{
Linklist H = NULL;
Node *p;
int x=0;
int n=0;
printf("Please input the numbers:!/n");
// H=HeadCreat();
H=TailCreat();
printf("The numbers you input is :/n");
print(H);
printf("/n");
x=Listlen(H);
printf("The lenth of the list is : %d /n",x);
printf("Please in put the number you wanna to add in :/n");
scanf("%d",&x);
H=Insert(H,x);
printf("The total numbers you input is :/n");
print(H);
printf("/n");
printf("Please in put the number you wanna to delete:/n");
scanf("%d",&n);
printf("The total numbers you input is :/n");
H=Del(H,n);
print(H);
printf("/n");
printf("The total numbers you input after reverseis :/n");
H=Reverse(H);
print(H);
printf("/n");
printf("Please input the numbers:/n");
H=TailCreat();
H=Delsame(H);
print(H);
}
- 单链表的建立,插入,删除,逆置
- 单链表的建立、插入、删除
- 单链表-建立插入删除
- 单链表建立 插入 删除
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的建立,反序,插入,删除
- 单链表的建立、插入、删除、遍历
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化,建立,插入,查找,删除。
- 单链表的定义建立插入删除查询
- 单链表的初始化,建立,插入,查找,删除
- 单链表的初始化、建立、插入、查找、删除
- 南昌大学在职博士学位学费排名 Churchman University的绿色环保计划
- Mysql 复制表及结构
- ARM中断及相关寄存器
- 多线程控件(Invoke,EndInvoke,BeginInvoke)
- 复制表结构及数据到新表
- 单链表的建立,插入,删除,逆置
- 基本的RIP配置(2)
- rand用法
- 基本的RIP配置(1)
- C++/CLR中使用c#类库 使用MFC类库
- RMI、Hessian、Burlap、Httpinvoker、WebService的比較
- 背下这148句话,你可以提高一个档次了,不止在文学方面
- js里面window.open方法的详细定义和用法
- 什么叫机会?