c语言主函数调用链表 c语言怎么在主函数调用自定义函数

C语言创建链表,函数调用部分

#includestdio.h

创新互联建站主营徽县网站建设的网络公司,主营网站建设方案,成都App定制开发,徽县h5成都小程序开发搭建,徽县网站营销推广欢迎徽县等地区企业咨询

#includewindows.h

#include stdio.h

#include malloc.h

#include stdlib.h

//定义数据类型名称

typedef int DataType;

#define flag -1        //定义数据输入结束的标志数据

//单链表结点存储结构定义

typedef struct Node

{

DataType data;

struct Node *next;

}LNode ,*LinkList;

//建立单链表子函数

LNode *Create_LinkList()

{

LNode *s,*head,*L;int i=0,x;        //定义指向当前插入元素的指针

while(1)

{

scanf("%d",x);

if(-1==x)

{   return head;

break;}

s= (LNode *)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =NULL;

i++;

if(i==1)

head=s;

else

L-next =s;

L=s;

}

}

//查找子函数(按序号查找)

LNode *Get_LinkList(LinkList L,int i)

{

LNode *p;

int j;        //j是计数器,用来判断当前的结点是否是第i个结点

p=L;

j=1;

while(p!=NULLji)

{

p=p-next ;        //当前结点p不是第i个且p非空,则p移向下一个结点

j++;

}

return p;

}

//插入运算子函数

void Insert_LinkList(LinkList L,int i,DataType x)        //在单链表L中第i个位置插入值为x的新结点

{

LNode *p,*s;

p =Get_LinkList(L,i);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("插入位置不合法!");

exit(-1);

}

else

{

s= (LinkList)malloc(sizeof(LNode));        //为当前插入元素的指针分配地址空间

s-data =x;

s-next =p-next ;

p-next =s;

}

}

//单链表的删除运算子函数

void Delete_LinkList(LinkList L,int i)        //删除单链表上的第i个结点

{

LNode *p,*q;

p=Get_LinkList(L,i-1);        //寻找链表的第i-1个位置结点

if(p==NULL)

{

printf("删除的位置不合法!");        //第i个结点的前驱结点不存在,不能执行删除操作

exit(-1);

}

else

{

if(p-next ==NULL)

{

 printf("删除的位置不合法!");        //第i个结点不存在,不能执行删除操作

 exit(-1);

}

else

{

 q=p-next ;

 p-next =p-next-next;

 free(q);

}

}

}

//求表长运算子函数

int Length_LinkList(LinkList L)

{

int l;        //l记录L的表长

LNode *p;

p=L;

l=1;

while(p-next)

{

p=p-next;

l++;

}

return l;

}

int main ()

{

LNode *head,*p;

head=(LinkList)malloc(sizeof(LNode));

int x,y;

a:

printf("*******menu*******\n");

printf("**创建**********1*\n");

printf("**插入**********2*\n");

printf("**删除**********3*\n");

printf("**表长**********4*\n");

printf("**清屏**********5*\n");

printf("**打印**********6*\n");

printf("**退出******other*\n");

printf("******************\n");

int i=1;

while(i)

{

printf("请输入选项:");

scanf("%d",i);

switch(i)

{

case 1:head=Create_LinkList(); getchar();break;

case 2:printf("请输入位置和数据;");

scanf("%d%d",x,y);

Insert_LinkList(head,x,y);break;

case 3:printf("请输入位置;");

scanf("%d",x);

Delete_LinkList(head,x);break;

case 4:printf("%d",Length_LinkList(head));break;

case 5:system("cls");goto a;

case 6:p=head;

while(p!=NULL)

{printf("%d\n",p-data);

p=p-next;}

break;

default :i=0;

}

}

}

我把创建给改了一下

C语言 链表操作

#include stdio.h

#include malloc.h

int m;

struct Node

{

int data;

struct Node *next;

}* listA, *listB;

//打印AList列表

//参数AList为显示的列表

void printList(struct Node *AList)

{

struct Node *post;

post = AList-next;

while (post)

{

printf("%d ",post-data);

post = post-next;

}

printf("\n");

}

//初始化表头,列表含有表头

//参数AList为初始化的列表

void init(struct Node **AList)

{

*AList = (struct Node*)malloc(sizeof(struct Node));

(*AList)-data = 0;

(*AList)-next = 0;

}

//创建列表

//参数AList为要创建的列表

void ReadList(struct Node **AList)

{

int i;

struct Node *post;

struct Node *pre;

// 输入列表长度

printf("请输入列表的长度为:"); scanf("%d",m);

//读取列表A

pre = *AList;

for(i=1; i=m; i++)

{

post = (struct Node*)malloc(sizeof(struct Node));

printf("第%d个节点值为:", i);

scanf("%d", post-data);

post-next = 0;

pre-next = post;

pre = post;

}

}

//插入节点

//参数AList为要插入的列表

//参数Aindex为要插入的节点的位置

void InsertNode(struct Node **AList, int Aindex = -1)

{

int i;

struct Node *pre, *post;

pre = *AList;

//判断插入位置,默认为头部插入

if((Aindex0) (Aindex=m))

{

post = (struct Node*)malloc(sizeof(struct Node));

printf("请输入要插入的节点值为:");

printf("listN%d = ", Aindex);

scanf("%d", post-data);

post-next = 0;

//寻找插入点

i = 1;

pre = *AList;

while ( iAindex )

{

pre = pre-next;

i = i + 1;

}

//插入节点

post-next = pre-next;

pre-next = post;

}

else //插入到头部

{

post = (struct Node*)malloc(sizeof(struct Node));

printf("listA1 = ");

scanf("%d", post-data);

post-next = 0;

//插入节点

post-next = pre-next;

pre-next = post;

}

m = m + 1;

}

//删除节点

//参数AList为要删除的列表

//参数Aindex为要删除的节点的位置

void DeleteNode(struct Node **AList, int Aindex)

{

int i;

struct Node *pre, *post;

pre = *AList;

//判断删除位置

if((Aindex0) (Aindex=m))

{

//寻找删除点

i = 1;

while ( iAindex )

{

pre = pre-next;

i = i + 1;

}

//赋值要删除节点

post = pre-next;

pre-next = post-next;

delete post;

m = m - 1;

}

else //输入越界

{

printf("不存在此节点");

}

}

//列表存盘

//参数AList为要存盘的列表

int WriteFile(struct Node *AList)

{

struct Node *post;

FILE *fd;

fd = fopen("data.txt", "wt");

if (fd == NULL)

{

printf("File open error");

return 0;

}

post = AList-next;

while (post)

{

fprintf(fd, "%d ", post-data);

post = post-next;

}

fclose(fd);

return 1;

}

//使用文件创建列表

//参数AList为要创建的列表

int ReadFile(struct Node **AList)

{

struct Node *pre, *post;

FILE *fd;

fd = fopen("data.txt", "rb");

if (fd == NULL)

{

printf("File open error");

return 0;

}

//读取列表

pre = *AList;

while (!feof(fd))

{

post = (struct Node*)malloc(sizeof(struct Node));

fscanf(fd, "%d ", post-data);

post-next = 0;

pre-next = post;

pre = post;

}

fclose(fd);

return 1;

}

void main(void)

{

//listA使用输入创建

//listB使用读取文件创建

init(listA);

init(listB);

ReadList(listA);

printf("输入的列表为:");

printList(listA);

InsertNode(listA, 1);

printf("插入第一个节点后的列表为:");

printList(listA);

DeleteNode(listA, 2);

printf("删除第二个节点后的列表为:");

printList(listA);

WriteFile(listA);

ReadFile(listB);

printf("使用文件创建的列表为:");

printList(listB);

}

以上程序可以直接运行,且结果正确。

主函数可以再做的复杂一些和友好一些。删除节点的位置和插入节点的位置可以作为输入之类的。

希望对你有所帮助

C语言编程——单链表的建立与维护,要求:由主函数调用单链表的建立、元素插入、删除和输出子函数,谢了

link *creat(int n) //链表建立 n为长度

{

link *p,*p0;

top=(link*)malloc(sizeof(link));

printf("输入数据 ");

scanf("%d",top-n);

top-next=NULL;

p0=top;

while(--n)

{

p=(link*)malloc(sizeof(link));

printf("输入数据 ");

scanf("%d",p-n);

p0-next=p;

p-next=NULL;

p0=p;

}

return top;

}

void inlink(int n,link *p0,link *p) //插入 p q之间

{

link *r;

r=(link*)malloc(sizeof(link));

r-n=n;

r-next=p;

p0-next=r;

p0=r;

}

void printl(link *head) //输出

{

link *p0,*p;

p=head;

while(p!=NULL)

{

p0=p;

printf("%d\n",p-n);

p=p-next;

}

}

void remov(link *p0,link *p) 删除

{

p0-next=p-next;

free(p);

}


当前标题:c语言主函数调用链表 c语言怎么在主函数调用自定义函数
网站路径:http://myzitong.com/article/ddjdhjs.html