求一份实现单链表的基本 *** 作的c语言程序,包括输入元素,谢谢。

求一份实现单链表的基本 *** 作的c语言程序,包括输入元素,谢谢。,第1张

#include<stdlib.h>

#include "nodedef.h"

#define CreateLinklistWay 1 // 0表示头插法创建链表,1表示尾插法创建链表

#if !CreateLinklistWay

/*********************************************************************

* 函数名称:linklist *CreateLinklistHead()

* 函数功能:利用头插法创建链表

* 参数:无

* 返 回 值:创建完链表后的链表头结点

* 说明:无

*********************************************************************/

extern linklist *CreateLinklistHead()

{

int x, i, nodeNum

linklist *head, *temp // 头结点与临时结点

head = (linklist *)malloc(sizeof(linklist)) // 生成表头结点

head->next = NULL // 给表头结点的指针域赋值

printf("请拿好输入链表中结点的个数:")

scanf("%d", &nodeNum)

for(i=1i<=nodeNumi++)

{

printf("请输入第 %d 个结点的数据:", i)

scanf("%d", &x)

temp = (linklist *)malloc(sizeof(linklist)) // 生成新的结点

temp->data = x // 对新结点的数据域赋值

// 将新结点插到头结点之后

temp->next = head->next

head->next = temp

}

return head // 返回新建链表的头结点

}

#else

/*********************************************************************

* 函数名称:linklist *CreateLinklistRear()

* 函数功能:利用尾插法创建链表

* 参数:无

* 返 回 值:创建完链表后的链表头结点

* 说明:无

*********************************************************************/

extern linklist *CreateLinklistRear()

{

int x, i, nodeNum

linklist *head, *rear, *temp // 定义头结点、尾结点和临时结点

head = (linklist *)malloc(sizeof(linklist)) // 生成表头结点,表头结点不存放数据

head->next = NULL // 将表头结点的指针域赋值为NULL

rear = head // 将表头结点赋值给表尾结点蚂敏樱

printf("请输入链表中结点的个数:")

scanf("%d", &nodeNum)

for(i=1i<=nodeNumi++)

{

printf("请输入第 %d 个结点的数据:", i)

scanf("%d", &x)

temp = (linklist *)malloc(sizeof(linklist)) // 生成新的结点

temp->data = x // 新增结点的数据域

temp->next = NULL// 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)

rear->next = temp/闷丛/ 使前一个结点指向新增结点(head->next=temp)

rear = temp // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head->next)

}

//rear->next = NULL // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)

return head // 返回头结点

}

#endif

#include<stdio.h>

#include<stdlib.h>

#define N 10 //顺序表的最大容量

int length=0 //顺序表的当前元素个数

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define LIST_INIT_SIZE 100//线性表存储的空间初和正戚始化分配量

#define LISTINCREAMENT 10 //线性表存储空间的分配增量

typedef struct LNode//线性单链表存储结构

{

int data

struct LNode *next

}LNode,*LinkList

int CreatList_L(LinkList&L)//创建一个线性链表

{

L=(LinkList)malloc(sizeof(LNode))//分配一个空间给链表,作为头结点

if(!L) exit(OVERFLOW)

L->next=NULL

return OK

}

int DestroyList_L(LinkList &L)//销毁链表

{

if(L) free(L)

return OK

}

int ListInsert_L(LinkList&L,int i,int e)//再练表的第i个元素前插入一个元素e

{

LinkList p=L//p指针定位于i-1

LNode *s

int j=0

while(p&&j<i-1) {p=p->nextj++}//定位

if(!p||j>i-1) return ERROR//如果i<1或大于链表元素个数+1

s=(LNode*)malloc(sizeof(LNode))

if(!s) exit(OVERFLOW)

s->data=e //完成唤陵插入 *** 作

s->next=p->next

p->next=s

return OK

}

int ListDelet_L(LinkList&L,int i,int&e)//删除链表L中的第i个元素,并返回给e

{

LinkList p=L

LNode* q

int j=0

while(!p&&j<i-1) {p=p->nextj++}//p指针定位于i-1;

if(!p->next||j>i-1) return ERROR

e=p->next->data //完成删除 *** 作

q=p->next

p->next=p->next->next

free(q)

return OK

}

int ListTraverse_L(LinkList L,int n)//链表的遍历

{

int i=0

if(!L)return ERROR

L=L->next

while(L)

{

if(L->data==n)return i

L=L->next

i++

}

return FALSE

}

int InverseSingleList_L(LinkList &L)

{

if(!L->next||!L->next->next)//如果链表少于2个Node那么链表不需要改变顺序

return OK

LNode *p,*q

p=L->next//第一次因为p是最后一个连接所以把p->next设为空

q=p->next

p->next=NULL

p=q

while(p)

{

q=p->next//用q去保留p后面一个Node

p->next=L->next

L->next=p

p=q

}

return OK

}

int main()

{

int List[N]

LinkList L

int ch,exit='N'

do

{

system("CLS")

printf("\t\t********************************************\n")

printf("\t\t* 1.创建一个顺序表.........(1)*\n")

printf("清厅\t\t* 2.在顺序表中查找元表.........(2)*\n")

printf("\t\t* 3.在顺序表中插入元表.........(3)*\n")

printf("\t\t* 4.在顺序表中删除元表.........(4)*\n")

printf("\t\t* 5.退出 .........(5)*\n")

printf("\t\t********************************************\n")

printf("\n请选择 *** 作代码:")

ch=getchar()

switch(ch)

{

case '1':

printf("\n请输入十个元素")

CreatList_L(L)

for(length=0length<Nlength++)

{

scanf("%d",&List[length])

getchar()

ListInsert_L(L,length+1,List[length])

}

printf("\n创建成功!")

getchar()

break

case '2':

scanf("%d",&List[0])

if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]))

else printf("不存在该元素")

getchar()

break

case '3':

scanf("%d%d",&length,&List[0])

ListInsert_L(L,length,List[0])

system("pause")

break

case '4':

scanf("%d",&length)

ListDelet_L(L,length,List[0])

system("pause")

break

case '5':

printf("\n您是否真的要退出程序(Y/N):")

getchar()

exit=getchar()

break

default:

getchar()

printf("\n无效输入,请重新选择...:")

getchar()

break

}

}while(exit!='y'&&exit!='Y')

}

#include <stdio.h>

#include <stdlib.h>

struct node

{

int num

struct node *next

}

/*建立链表*/

struct node *creat(int n)

{

int x, i

struct node *head, *p, *r

head=(struct node*)malloc(sizeof(struct node))

r=head

printf("请输入数字\r\n")

for(i=0i<ni++)

{

scanf("%d", &x)

p=(struct node*)malloc(sizeof(struct node))

p->num=x

r->next=p

r=p

}

r->next=NULL

return(head)

}

/*删除重复结点*/

void delet(struct node *head)

{

struct node *p, *q, *r

p=head->next

while(p!=NULL)

{

q=p

while(q->next!=NULL)

{

r=q->next

if(r->num==p->num)

{

if(r->next!=NULL)

{

q->next=r->next

free(r)

}

else

{

q->next=NULL

free(r)

}

}

else

{

q=r

}

}

p=p->next

}

}

/*排序*/

void sort(struct node *head)

{

struct node *p, *q, *small

int temp

for(p=head->nextp->next!=NULLp=p->next)

{

small=p

for(q=p->nextq!=NULL q=q->next)

{

if(q->num<small->num)

small=q

}

if(small!=p)

{

temp=small->num

small->num=p->num

p->尺码贺num=temp

}

}

}

/*输出*/

void output(struct node *head)

{

struct node *pt

pt=head->next

while(pt!=NULL)

{

printf("%d\r\n", pt->num)

pt=pt->next

}

}

void destroy(Node* head)

{

while (head)

{

Node* temp = head

head = head->pstnext

free(temp)

}

}

main()

{

int n

struct node *head

printf("输入数字的个数n\r\n")

scanf("%d", &n)

head=creat(n)

printf("输入的数字\r\n")

output(head)

delet(head)

printf("删除重复结点后输出数字\r\n")

output(head)

sort(head)

printf("排序后输出数字\r\模慧n")

output(head)

destroy(head);

}

给你一个我的程序,大家一起进步!!!祝你学习快乐!!陵派!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12372053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存