在数据结构中怎样进行单链表的输入输出?
答案:3 悬赏:30 手机版
解决时间 2021-03-11 18:26
- 提问者网友:謫仙
- 2021-03-11 14:14
在数据结构中怎样进行单链表的输入输出?
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-03-11 14:48
内容包括链表的创建,增加、删除节点,链表的逆序、排序和销毁等。
#include
#include
typedef struct node
{
int data;
node* pNext;
}Node;
//链表的操作,以有头节点为例,无头节点类似
Node* head = NULL;
//创建链表,头结点data=0,pNext=NULL;
bool createNodeList()
{
head = (Node*) malloc(sizeof(Node));
if(NULL == head)
{
return false;
}
else
{
head->data = 0;
head->pNext = NULL;
return true;
}
}
//增加节点
bool addNode(Node* node)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;
Node* q = head;
while(NULL != p)
{
q = p;
p = p->pNext;
}
q->pNext = node;
node->pNext = NULL;
return true;
}
//删除节点
bool deleteNode(int index)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;
int length = 0;
while(NULL != p)
{
length ++;
p = p->pNext;
}
if(length < index)
{
return false;
}
else
{
Node* q = head;
p = head;
for(int i=0;i {
q = p;
p = p->pNext;
}
Node* t = p->pNext;
q->pNext = t;
free(p);
return true;
}
}
//逆序
void reverseNodeList()
{
if(NULL == head)
{
return;
}
//如果链表长度为1
if(head->pNext == NULL)
{
return;
}
Node* p = head->pNext;
Node* q = p->pNext;
Node* t = NULL;
while(NULL != q)
{
t = q->pNext;
q->pNext = p;
p = q;
q = t;
}
head->pNext->pNext = NULL;
head->pNext = p;
}
//排序(降序)
void sort()
{
//冒泡排序
Node* pHead = head;
if(head == NULL)
{
return;
}
if(pHead->pNext == NULL)
{
return;
}
Node* pi = pHead->pNext;
Node* pj = pi->pNext;
for(;pi != NULL;pi=pi->pNext)
{
for(pj = pi->pNext;pj != NULL;pj=pj->pNext)
{
if(pj->data>pi->data)
{
int tmp = pj->data;
pj->data = pi->data;
pi->data = tmp;
}
}
}
}
//销毁
void destroyNodeList()
{
if(NULL == head)
{
return;
}
if(NULL == head->pNext)
{
free(head);
head = NULL;
return;
}
Node* p = head->pNext;
while(NULL != p)
{
Node* tmp = p;
p = p->pNext;
free(tmp);
}
free(head);
head = NULL;
}
void main()
{
createNodeList();
Node* node1 = (Node*)malloc(sizeof(Node));
node1->data = 1;
node1->pNext = NULL;
Node* node2 = (Node*)malloc(sizeof(Node));
node2->data = 2;
node2->pNext = NULL;
addNode(node1);
addNode(node2);
reverseNodeList();
Node* node3 = (Node*)malloc(sizeof(Node));
node3->data = 3;
node3->pNext = NULL;
addNode(node3);
sort();
deleteNode(2);
destroyNodeList();
}
#include
#include
typedef struct node
{
int data;
node* pNext;
}Node;
//链表的操作,以有头节点为例,无头节点类似
Node* head = NULL;
//创建链表,头结点data=0,pNext=NULL;
bool createNodeList()
{
head = (Node*) malloc(sizeof(Node));
if(NULL == head)
{
return false;
}
else
{
head->data = 0;
head->pNext = NULL;
return true;
}
}
//增加节点
bool addNode(Node* node)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;
Node* q = head;
while(NULL != p)
{
q = p;
p = p->pNext;
}
q->pNext = node;
node->pNext = NULL;
return true;
}
//删除节点
bool deleteNode(int index)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;
int length = 0;
while(NULL != p)
{
length ++;
p = p->pNext;
}
if(length < index)
{
return false;
}
else
{
Node* q = head;
p = head;
for(int i=0;i
q = p;
p = p->pNext;
}
Node* t = p->pNext;
q->pNext = t;
free(p);
return true;
}
}
//逆序
void reverseNodeList()
{
if(NULL == head)
{
return;
}
//如果链表长度为1
if(head->pNext == NULL)
{
return;
}
Node* p = head->pNext;
Node* q = p->pNext;
Node* t = NULL;
while(NULL != q)
{
t = q->pNext;
q->pNext = p;
p = q;
q = t;
}
head->pNext->pNext = NULL;
head->pNext = p;
}
//排序(降序)
void sort()
{
//冒泡排序
Node* pHead = head;
if(head == NULL)
{
return;
}
if(pHead->pNext == NULL)
{
return;
}
Node* pi = pHead->pNext;
Node* pj = pi->pNext;
for(;pi != NULL;pi=pi->pNext)
{
for(pj = pi->pNext;pj != NULL;pj=pj->pNext)
{
if(pj->data>pi->data)
{
int tmp = pj->data;
pj->data = pi->data;
pi->data = tmp;
}
}
}
}
//销毁
void destroyNodeList()
{
if(NULL == head)
{
return;
}
if(NULL == head->pNext)
{
free(head);
head = NULL;
return;
}
Node* p = head->pNext;
while(NULL != p)
{
Node* tmp = p;
p = p->pNext;
free(tmp);
}
free(head);
head = NULL;
}
void main()
{
createNodeList();
Node* node1 = (Node*)malloc(sizeof(Node));
node1->data = 1;
node1->pNext = NULL;
Node* node2 = (Node*)malloc(sizeof(Node));
node2->data = 2;
node2->pNext = NULL;
addNode(node1);
addNode(node2);
reverseNodeList();
Node* node3 = (Node*)malloc(sizeof(Node));
node3->data = 3;
node3->pNext = NULL;
addNode(node3);
sort();
deleteNode(2);
destroyNodeList();
}
全部回答
- 1楼网友:野慌
- 2021-03-11 15:43
我有一个完整的代码给你。如附件
更多技术文章可以关注我的微博,名字:成都睿尔科技
具体代码如下://------------------------------( 链表 )-------------------------------------
#include
#include
#define SUCCESS 1
#define FLASE 0
typedef struct node
{
int iData;
struct node *pNext;
}Node,*LinkList;
//初始化链表
//返回类型为指向结构体的指针
LinkList Init_LinkList(LinkList pHead)
{
pHead=NULL;
return pHead;
}
//返回链表长度
int Get_Length(LinkList pHead)
{
int iLength = 0;
Node* pFlag = NULL;
pFlag = pHead;
while(pFlag!=NULL)
{
iLength++;
pFlag=pFlag->pNext;
}
return iLength;
}
//插入结点
//成功插入返回链表头指针,不成功提示错误,返回头指针
//pHead:结点头指针
//iLocate:位置
//iData:数据
LinkList Inset_LinkList(LinkList pHead , int iLocate , int iData)
{
int iCount = 0;
Node* pNode = NULL;
Node* pFlag = NULL;
pNode = (Node* )malloc(sizeof(pNode));
if(iLocate==1)
{
pNode->iData = iData;
pNode->pNext = pHead;
pHead = pNode;
return pHead;
}
else if(iLocate<=(Get_Length(pHead)+1))
{
pFlag = pHead;
for ( iCount=1; iCount
pNode->iData = iData;
pNode->pNext = pFlag->pNext;
pFlag->pNext = pNode;
printf("Insert Success ");
return pHead;
}
else
{
free(pNode);
printf("Locate is Error.Insert Failre ");
return pHead;
}
}
//根据数据删除结点
//iData为要删除的结点
LinkList Delete_Data_LinkList(LinkList pHead,int iData)
{
LinkList pFlag1,pFlag2;
pFlag1 = pHead;
pFlag2 = pHead;
if(pHead==NULL)
{
printf("del a empty LinkList ");
return pHead;
}
if(pHead->iData==iData)
{
pHead=pFlag1->pNext;
// free(pFlag1);
printf("Del Succuess ");
return pHead;
}
pFlag1=pFlag1->pNext;
while(pFlag1->pNext!=NULL)
{
if(pFlag1->iData==iData)
{
pFlag2->pNext=pFlag1->pNext;
// free(pFlag1);
printf("Del Success");
return pHead;
}
else
{
pFlag1=pFlag1->pNext;
pFlag2=pFlag2->pNext;
}
}
printf("no such data ");
return pHead;
}
//根据位置删除结点
//iLocate为需要删除的位置
LinkList Delete_Locate_LinkList(LinkList pHead,int iLocate)
{
LinkList pFlag=pHead;
int iCount;
if(pFlag==NULL)
{
printf("the LinkList is empty ");
return pHead;
}
else if(iLocate==1)
{
pHead=pHead->pNext;
printf("test1 ");
printf("del Success");
// free(pFlag);
return pHead;
}
else if (iLocate <= Get_Length(pHead))
{
for ( iCount=1; iCount<=iLocate-2; iCount++)
{
pFlag = pFlag->pNext;
}
pFlag->pNext = pFlag->pNext->pNext;
// free(pFlag->pNext);
printf("Del Success");
return pHead;
}
else
{
printf("Locate error ");
return pHead;
}
}
//输入数据函数
int Input_iData(void)
{
int iData;
printf(" please input data : ");
scanf("%d",&iData);
return iData;
}
//输入位置函数
int Input_iLocate(void)
{
int iLocate;
printf(" please input Locate : ");
scanf("%d",&iLocate);
if (iLocate>0)
return iLocate;
else
{
printf("Locate Error. ");
return FLASE;
}
}
//打印所有结点
int Printf_Node(LinkList pHead)
{
LinkList pNode;
pNode=pHead;
while(pNode!=NULL)
{
printf("%d ",pNode->iData);
pNode = pNode->pNext;
}
return SUCCESS; //成功返回SUCCESS
}
void Run_LinkList(void)
{
int iChoose;
int bRun;
bRun = 1;
//LinkList temp;
LinkList pHead=NULL;
// pHead = Init_LinkList(pHead);
while (bRun)
{
printf("1.Input data into LinkList. ");
printf("2.Delete data form LinkList by locate. ");
printf("3.Delete data form LinkList by data. ");
printf("4.Printf all data form LinkList. ");
printf("5.Quit Program. ");
printf("Please choose your mind : ");
scanf("%d",&iChoose);
printf(" ");
switch (iChoose)
{
case 1 : pHead=Inset_LinkList(pHead,Input_iLocate(),Input_iData());
break;
case 2 : pHead=Delete_Locate_LinkList(pHead,Input_iLocate());
break;
case 3 : pHead=Delete_Data_LinkList(pHead,Input_iData());
break;
case 4 : Printf_Node(pHead);
break;
case 5 : bRun = 0;
break;
default :printf("Your choose maybe is error,please try again. ");
break;
}
printf(" ");
getchar();
}
}
int main(void)
{
Run_LinkList();
return 0;
}
- 2楼网友:旧脸谱
- 2021-03-11 15:35
//创建一个单链表
#include
#include
typedef struct lnode * pointer;
struct lnode
{
int data;
struct lnode * next;
};
typedef pointer lklist;
void create(lklist &l)
{
int x;
lklist r;
l=(lklist)malloc(sizeof(struct lnode));
r=l;
printf("Input the elemment: ");
scanf("%d", &x);//输入元素
while(x != 0) //以0作为结束标志
{
lklist s;
s=(pointer)malloc(sizeof(struct lnode));
s->data=x;
r->next=s;
r=s;
scanf("%d", &x);}
r->next=NULL;
}
void output(lklist l) //输出单链表的元素
{
lklist p;
p=l->next;
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
}追问可以加一下你的QQ吗?我今年大二了,计算机专业可啥也不懂,想好好学一下可自己看得迷糊,实在是想找个高手请教一下1942567571,万分感谢!
这个程序编译是出了一点小差错追答我也才是大二,你是哪个学校的啊?我刚加你了
#include
#include
typedef struct lnode * pointer;
struct lnode
{
int data;
struct lnode * next;
};
typedef pointer lklist;
void create(lklist &l)
{
int x;
lklist r;
l=(lklist)malloc(sizeof(struct lnode));
r=l;
printf("Input the elemment: ");
scanf("%d", &x);//输入元素
while(x != 0) //以0作为结束标志
{
lklist s;
s=(pointer)malloc(sizeof(struct lnode));
s->data=x;
r->next=s;
r=s;
scanf("%d", &x);}
r->next=NULL;
}
void output(lklist l) //输出单链表的元素
{
lklist p;
p=l->next;
while(p!=NULL)
{
printf("%d ", p->data);
p=p->next;
}
}追问可以加一下你的QQ吗?我今年大二了,计算机专业可啥也不懂,想好好学一下可自己看得迷糊,实在是想找个高手请教一下1942567571,万分感谢!
这个程序编译是出了一点小差错追答我也才是大二,你是哪个学校的啊?我刚加你了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯