链表的创建 查找 排序 插入 删除 逆序 长度 显示
来源:互联网 发布:使命召唤10怎么优化 编辑:程序博客网 时间:2024/06/05 11:15
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdbool.h>
typedef int elementType;
typedef struct node
{
int data;
struct node1*next;
} LinkList;
FILE *fp;
LinkList*Creat(int length)
{
LinkList*head,*p,*q;
int i,j;
int a[length];
fp=fopen("D:\\SP\\sp.txt","r");
if(fp==NULL)
{
printf("The file can not be opened!");
exit(1);
}
for(i=0; i<length; i++)
{
fscanf(fp,"%d",&a[i]);
}
fscanf(fp,"\n");
fclose(fp);
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
q=head;
for(j=0; j<length; j++)
{
p=(LinkList*)malloc(sizeof(LinkList));
q->next=p;
p->data=a[j];
q=p;
}
p=(LinkList*)malloc(sizeof(LinkList));
q->next=p;
q->next=NULL;////////////////////////////////////////////////////q-next 而不是q
return head;
}
LinkList*Sort(LinkList*head){
if(head==NULL){
return NULL;
}
LinkList*p=head->next;
LinkList*p_pre=p;
bool flag=false;
while(p_pre!=NULL){
int min=p_pre->data;
p=p_pre->next;
while(p){
if(min<=p->data){
p=p->next;
flag=true;
continue;
}
else
{
min=p->data;////////////////////////先赋值给min,不然后面的值是交换了的!
int temp;
temp=p_pre->data;
p_pre->data=p->data;
p->data=temp;
p=p->next;
flag=true;
}
if(flag==false){
return head;
}
}
p_pre=p_pre->next;
}
return head;
}
void Display(LinkList*head)
{
LinkList*p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int Search(LinkList*head,int x)
{
int n=0;
LinkList *p;
p=head->next;
while(p!=NULL&&(p->data!=x))
{
p=p->next;
n++;
}
if(p==NULL)
{
return -1;
}
else
{
return n;
}
}
LinkList*Insert(LinkList*head,int insertnum){
LinkList*p,*q,*c,*d;
c=(LinkList*)malloc(sizeof(LinkList));
d=(LinkList*)malloc(sizeof(LinkList));
p=head;
q=p->next;
if(q==NULL){
printf("The list is empty!");
}
if(q->data>=insertnum){
c->data=insertnum;
c->next=head->next;
return head;
}
else{
p=q;
q=p->next;
while(q!=NULL){
if((q->data)>=insertnum){
c->data=insertnum;
c->next=p->next;
p->next=c;
return head;
}
else{
p=q;
q=p->next;
}
if(q==NULL){
c->data=insertnum;
p->next=c;
c->next=d;
c->next=NULL;
return head;
}
}
}
}
LinkList*Delete(LinkList*head,int deleteNum){
LinkList*p,*q;
p=head;//////////////////////////////////////////////////////////////////////////对此处不确定
if(p==NULL){
return NULL;
}
else{
if(p->data==deleteNum){
head=head->next;
free(p);
return head;
}
else{
while(p!=NULL){
q=p->next;
if(q->data==deleteNum){
p->next=q->next;
free(q);
break;
}
p=p->next;
}
return head;
}
}
}
int Count(LinkList*head){
LinkList*p;
int length=0;
p=head->next;
while(p!=NULL){
length++;
p=p->next;
}
return length;
}
LinkList*Reverse(LinkList*head){
LinkList*p,*q;
p=head->next;
/*while(p!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
*/
head->next=NULL;
while(p){
q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
return head;
}
int main()
{
LinkList* head=(LinkList*)malloc(sizeof(LinkList));
int length;
int order;
int deleteNum;
int x;
char c;
int insertnum;
int ListLength;
int position;
bool inputFlag;
inputFlag=true;
while(inputFlag)
{
printf("Please input number order:Create/0,Display/1,Sort/2,Search/3, Insert/4,Delete/5,Count/6,Revers/7\n");
scanf("%d",&order);
switch(order)
{
case 0:
printf("Creat the List\n");
printf("Please input the length:\n");
scanf("%d",&length);
head=Creat(length);
printf("The LIST is created!\n");
break;
case 1:
printf("Display the List:\n");
Display(head);
break;
case 2:
printf("Sort\n");
head=Sort(head);
break;
case 3:
printf("Search\n");
printf("Please input the number you want to search:\n");
scanf("%d",&x);
position =Search(head,x);
printf("The position of it is:%d\n",position);
break;
case 4:
printf("Insert\n");
printf("Please input the number you want to insert:\n");
scanf("%d",&insertnum);
head=Insert(head,insertnum);
break;
case 5:
printf("Delete\n");
printf("Please input the position of the number you want to delete:\n");
scanf("%d",&deleteNum);
head=Delete(head,deleteNum);
break;
case 6:
printf("Count\n");
ListLength=Count(head);
printf("%d\n",ListLength);
break;
case 7:
printf("Reverse\n");
head=Reverse(head);
break;
default:
break;
}
printf("Would you want to go on? Yes/Y or No/N\n");
scanf(" %c",&c);
if(c=='Y')
{
inputFlag=true;
}
else if(c=='N')
{
inputFlag=false;
}
else
{
printf("You input the wrong information!\n");
inputFlag=false;
}
}
return 0;
#include <stdlib.h>
#include <malloc.h>
#include <stdbool.h>
typedef int elementType;
typedef struct node
{
int data;
struct node1*next;
} LinkList;
FILE *fp;
LinkList*Creat(int length)
{
LinkList*head,*p,*q;
int i,j;
int a[length];
fp=fopen("D:\\SP\\sp.txt","r");
if(fp==NULL)
{
printf("The file can not be opened!");
exit(1);
}
for(i=0; i<length; i++)
{
fscanf(fp,"%d",&a[i]);
}
fscanf(fp,"\n");
fclose(fp);
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
q=head;
for(j=0; j<length; j++)
{
p=(LinkList*)malloc(sizeof(LinkList));
q->next=p;
p->data=a[j];
q=p;
}
p=(LinkList*)malloc(sizeof(LinkList));
q->next=p;
q->next=NULL;////////////////////////////////////////////////////q-next 而不是q
return head;
}
LinkList*Sort(LinkList*head){
if(head==NULL){
return NULL;
}
LinkList*p=head->next;
LinkList*p_pre=p;
bool flag=false;
while(p_pre!=NULL){
int min=p_pre->data;
p=p_pre->next;
while(p){
if(min<=p->data){
p=p->next;
flag=true;
continue;
}
else
{
min=p->data;////////////////////////先赋值给min,不然后面的值是交换了的!
int temp;
temp=p_pre->data;
p_pre->data=p->data;
p->data=temp;
p=p->next;
flag=true;
}
if(flag==false){
return head;
}
}
p_pre=p_pre->next;
}
return head;
}
void Display(LinkList*head)
{
LinkList*p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int Search(LinkList*head,int x)
{
int n=0;
LinkList *p;
p=head->next;
while(p!=NULL&&(p->data!=x))
{
p=p->next;
n++;
}
if(p==NULL)
{
return -1;
}
else
{
return n;
}
}
LinkList*Insert(LinkList*head,int insertnum){
LinkList*p,*q,*c,*d;
c=(LinkList*)malloc(sizeof(LinkList));
d=(LinkList*)malloc(sizeof(LinkList));
p=head;
q=p->next;
if(q==NULL){
printf("The list is empty!");
}
if(q->data>=insertnum){
c->data=insertnum;
c->next=head->next;
return head;
}
else{
p=q;
q=p->next;
while(q!=NULL){
if((q->data)>=insertnum){
c->data=insertnum;
c->next=p->next;
p->next=c;
return head;
}
else{
p=q;
q=p->next;
}
if(q==NULL){
c->data=insertnum;
p->next=c;
c->next=d;
c->next=NULL;
return head;
}
}
}
}
LinkList*Delete(LinkList*head,int deleteNum){
LinkList*p,*q;
p=head;//////////////////////////////////////////////////////////////////////////对此处不确定
if(p==NULL){
return NULL;
}
else{
if(p->data==deleteNum){
head=head->next;
free(p);
return head;
}
else{
while(p!=NULL){
q=p->next;
if(q->data==deleteNum){
p->next=q->next;
free(q);
break;
}
p=p->next;
}
return head;
}
}
}
int Count(LinkList*head){
LinkList*p;
int length=0;
p=head->next;
while(p!=NULL){
length++;
p=p->next;
}
return length;
}
LinkList*Reverse(LinkList*head){
LinkList*p,*q;
p=head->next;
/*while(p!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
*/
head->next=NULL;
while(p){
q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
return head;
}
int main()
{
LinkList* head=(LinkList*)malloc(sizeof(LinkList));
int length;
int order;
int deleteNum;
int x;
char c;
int insertnum;
int ListLength;
int position;
bool inputFlag;
inputFlag=true;
while(inputFlag)
{
printf("Please input number order:Create/0,Display/1,Sort/2,Search/3, Insert/4,Delete/5,Count/6,Revers/7\n");
scanf("%d",&order);
switch(order)
{
case 0:
printf("Creat the List\n");
printf("Please input the length:\n");
scanf("%d",&length);
head=Creat(length);
printf("The LIST is created!\n");
break;
case 1:
printf("Display the List:\n");
Display(head);
break;
case 2:
printf("Sort\n");
head=Sort(head);
break;
case 3:
printf("Search\n");
printf("Please input the number you want to search:\n");
scanf("%d",&x);
position =Search(head,x);
printf("The position of it is:%d\n",position);
break;
case 4:
printf("Insert\n");
printf("Please input the number you want to insert:\n");
scanf("%d",&insertnum);
head=Insert(head,insertnum);
break;
case 5:
printf("Delete\n");
printf("Please input the position of the number you want to delete:\n");
scanf("%d",&deleteNum);
head=Delete(head,deleteNum);
break;
case 6:
printf("Count\n");
ListLength=Count(head);
printf("%d\n",ListLength);
break;
case 7:
printf("Reverse\n");
head=Reverse(head);
break;
default:
break;
}
printf("Would you want to go on? Yes/Y or No/N\n");
scanf(" %c",&c);
if(c=='Y')
{
inputFlag=true;
}
else if(c=='N')
{
inputFlag=false;
}
else
{
printf("You input the wrong information!\n");
inputFlag=false;
}
}
return 0;
}
如果对你有用的话 就点赞加关注吧!!!
1 0
- 链表的创建 查找 排序 插入 删除 逆序 长度 显示
- 链表的创建,插入,删除,逆序
- 链表的全部操作——创建、插入、查找、删除、计算长度
- 循环链表的创建、插入、删除、逆序、显示(C++实现)
- 链表的创建、逆序显示、插入显示
- 链表的删除,插入,查找,排序
- C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等
- 链表的创建,删除,插入,逆序,打印
- 顺序表的创建,插入,删除,查找,逆序以及合并两个有序的顺序表
- 单链表的创建,删除,插入,显示,排序
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- 单向链表的创建,插入,删除,排序,查找---新人贴
- 单向链表的操作:创建,删除,插入,销毁,查找
- 创建链表,遍历,求长度,插入,删除,排序,是否为空
- 单链表的创建,插入,删除以及逆序
- 单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度
- 创建单链表,求链表长度、查找、插入、删除、合并。
- 单链表创建-遍历-排序-插入-删除-逆序操作
- Unity Text 插入图片
- 文件过滤
- c# ascill码和对应字符转化
- 关于PADS的一些概念和实用技巧(二)
- Mongo中id介绍
- 链表的创建 查找 排序 插入 删除 逆序 长度 显示
- LeetCode---Remove Linked List Elements
- 自定义函数库
- 好用的iOS开发工具
- C++学习笔记1——iostream与整型
- android、java将集合逆序排列
- 集体智慧编程第四章[搜索引擎与排名]总结
- phpstorm集成phpunit
- iOS学习笔记(十七)——文件操作(NSFileManager)