當前位置:首頁 » 編程語言 » c語言如何輸入單向鏈表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何輸入單向鏈表

發布時間: 2023-05-22 03:57:07

A. 用C語言實現對單鏈表的基本操作

#include<stdio.h>
#include<stdlib.h>

typedefintDataType;

typedefstructnode{
DataTypemember;
structnode*next;
}*LinkList,*pNode;

//初始化鏈表
LinkListGetEmptyList(){
LinkListhead=(pNode)malloc(sizeof(structnode));
head->member=0;
head->next=NULL;
returnhead;
}


//在非增鏈表中插入結點
voidInsertNode(LinkListhead,DataTypex){
pNodep,q;
for(p=head;p->next!=NULL;p=p->next){
if(p->next->member<=x){
q=(pNode)malloc(sizeof(structnode));
q->member=x;
q->next=p->next;
p->next=q;
return;
}
}
q=(pNode)malloc(sizeof(structnode));
q->member=x;
q->next=p->next;
p->next=q;
}

//新結點插入為首結點
voidPushNode(LinkListhead,DataTypex){
pNodep=(pNode)malloc(sizeof(structnode));
p->member=x;
p->next=head->next;
head->next=p;
}

//刪除結點
intDeleteNode(LinkListhead,DataTypex){
pNodep,q;
for(p=head;p!=NULL;p=p->next){
if(p->next->member==x){
q=p->next;
p->next=q->next;
free(q);
return1;//成功刪除member(第一個)為x的結點
}
}
return0;//沒有找到member為x的結點
}

//查找結點
intFindNode(LinkListhead,DataTypex){
pNodep;
for(p=head->next;p!=NULL;p=p->next){
if(p->member==x)return1;//找到了
}
return0;//沒有找到
}

//銷毀鏈表
voidDestroyList(LinkListhead){
pNodeq,p=head;
while(p){
q=p;
p=q->next;
free(q);
}
head=NULL;
}

//遍歷鏈表
voidShowList(LinkListhead){
pNodep=head->next;
while(p!=NULL){
printf("%d",p->member);
p=p->next;
}
printf(" ");
}

intmain(){
DataTypex,res;
LinkListhead=GetEmptyList();
printf("輸入一個整數('q'toquit):");
while(scanf("%d",&x)==1){
InsertNode(head,x);//創建非增鏈表
printf("輸入一個整數('q'toquit):");
}
fflush(stdin);
ShowList(head);
printf("輸入待查找的整數:");
scanf("%d",&x);
res=FindNode(head,x);
if(res)printf("找到了。 ");
elseprintf("沒找到! ");
printf("輸入待刪除的整數:");
scanf("%d",&x);
res=DeleteNode(head,x);
if(res)printf("成功刪除。 ");
elseprintf("沒找到數據為:%d的結點! ",x);
ShowList(head);
DestroyList(head);
return0;
}

B. C語言單向鏈表的創建,輸入,插入和刪除的實現

/* 線性表-鏈表的操作: 只提供核心語句 */
#include "stdio.h"
#include "stdlib.h"
#define N 100
typedef int ElemType;/* 鏈表的存儲結構 */
typedef struct LNode{
ElemType data;
struct LNode *next; } LNode,*LinkList;/* 鏈表的基本操作 *//******* 1.初始化鏈表 ******/
void InitList(LinkList *L)
{ *L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL; }/******* 2.銷毀鏈表 ******/
void DestroyList(LinkList *L)
{ LinkList p;
while(*L!=NULL)
{ p=*L;
*L=(*L)->next;
free(p); }
}
/******* 10.在順序表第n個位置頃亮兆插入元素e ******/
void ListInsert(LinkList *L, int n, ElemType e)
{ LinkList p,q,new; int i;
q=*L; p=(*L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
new=(LinkList)malloc(sizeof(LNode));
new->data=e;
q->next=new; new->next=p; }/******* 11.刪除鏈表中第n個位置的元素 ******/
void ListDelete(LinkList *L, int n, ElemType *e)
{ LinkList p,q; int i;
q=*L; p=(*L)->next; i=1;
while (p!=NULL && i<n) { q=p; p=p->next; i++; }
*e=p->data;
q->next=p->next; free(p); }/******* 12.遍歷鏈表並輸出 ******/
void ListTraverse(LinkList L)
{ LinkList p;
printf("\nList:\t");
p=L->next;
while (p!=NULL)
{ printf("%d\t",p->data);
p=p->next; }
}/******* A(2).後接法建立順序鏈表雀租 ******/
void CreateList2(LinkList *L, ElemType a[], int n)
{ LinkList p,new; int i;
p=*L;
for(i=0; i<n; i++)
{ new=(LinkList)malloc(sizeof(LNode));
new->data=a[i];
p->next=new; p=p->next; }
p->next=NULL;
}
/* 主函數 */
main()
{ LinkList La; ElemType a[]={1,3,5,7,9},x;
InitList(&La);//初始化鏈表
CreateList2(&La,a,5);//建立鏈表並用鍵寬數組賦值
ListTraverse(La);//遍歷鏈表
ListInsert(&La, 3, 100);//第三個位置插入100
ListTraverse(La);//遍歷鏈表
ListDelete(&La,5,&x);//刪除第五個元素,用x返回
ListTraverse(La);//遍歷鏈表 DestroyList(&La);//銷毀鏈表
} 這是我們剛學的,保證簡潔准確

C. 用C語言編程實現單鏈表的基本操作

運行結果如下:


完整代碼如下:


#include<stdio.h>

#include<stdlib.h>


typedef struct LNode

{

char data;

LNode *next;

}* LNodePtr;


LNodePtr CreateList()

{

//初始化頭節點

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

head->data = 0;

head->next = NULL;


LNodePtr tNode;//臨時節點

char data;

while(true)

{

scanf("%c",&data);

if(data == '' || data == ' ' || data == ' ' || data == ' ')

{

continue;

}

if(data == '!')//輸入感嘆號停止插入節點

{

printf("輸入鏈表元素結束。 ");

break;

}

if(data >= 'A' && data <= 'Z')

{

tNode = (LNodePtr)malloc(sizeof(LNode));

tNode->data = data; /* 數據域賦值 */

tNode->next = head->next;

head->next = tNode;

}

else

{

printf("輸入字元需為大寫字母。 ");

}

}

return head;

}


/**

加密函數,加密的方式為鏈接head的所有節點前移offset位,但是不支持offset比鏈表的節點數多

@param head 鏈表頭節點

@param offset 節點前移的位數

*/

void EncryptList(LNodePtr head,int offset)

{

LNodePtr tNode = head->next;

int i;

for(i = 0; i < offset; i++)

{

if(tNode->next != NULL)

{

tNode = tNode->next;

}

}

if(i == offset)

{

LNodePtr newHead = tNode;

LNodePtr tail = tNode;

while (tail->next != NULL)

{

tail = tail->next;

}

tail->next = head->next;

while(tNode->next != NULL)

{

if(tNode->next != newHead)

{

tNode = tNode->next;

}

else

{

tNode->next = NULL;

break;

}

}

head->next = newHead;

}

else

{

printf("不支持移動");

}

}


void ListPrint(LNodePtr head)

{

if(head->next != NULL)

{

LNodePtr tNode = head->next;

while (tNode->next != NULL)

{

printf("%c ",tNode->data);

tNode = tNode->next;

}

printf("%c",tNode->data);

}

}


int main()

{

LNodePtr list = CreateList();

printf(" 創建的鏈表如下: ");

ListPrint(list);

EncryptList(list,3);

printf(" 所有節點前移了3位之後的鏈表如下: ");

ListPrint(list);

printf(" ");

return 0;

}


如果看不懂代碼可以問我

D. 用C語言編程實現單鏈表的基本操作

第二個顯示為什麼?為什麼什麼東西都沒有、
#include<stdio.h>
typedef
struct
sample
{
char
ch;
struct
sample
*next;
}LNode;
LNode
*Createlist(LNode
*head)
//創建單鏈表,頭插入法
{
LNode
*p;
if((head=(LNode
*)malloc(sizeof(LNode)))==NULL)
printf("aply
error\n");
head->next=NULL;
head->ch
=
'\0';
int
i=
0;
printf("請一次輸入A-Z:\n");
for(i
=
0
;
i
<
26;
++i)
{
p=(LNode
*)malloc(sizeof(LNode));
if(!p)
printf("aply
error\n");
scanf("%c",&p->ch);
p->next
=
head->next;
head->next=p;
}
return
head;
}
LNode
*EncryptList(LNode*
head)
{
LNode
*p=
head,*q
=
head->next,*r
=
head->next;
while(p->next)
{
p
=
p->next;
}
int
i
=
0
;
for(i
=
0
;
i
<
3;
i++)
{
p->next
=
r;
p
=
p->next;
q
=
q->next;
r
=
q;
}
p->next
=NULL;
head->next
=
q;
return
head;
}
void
ListPrint(LNode
*head)
{
LNode
*p
=
head->next;
while(p->next!=NULL)
{
printf("%c\t",p->ch);
p=p->next;
}
printf("%c\n",p->ch);
}
int
main(void)
{
LNode
*head;
head
=
Createlist(head);//鏈表初始化
ListPrint(head);
//列印單鏈表數據
head
=
EncryptList(head);
ListPrint(head);
return
0;
}
看看。

E. C語言數據結構 如何建立單向循環鏈表並且輸入值

#include<iostream>
usingnamespacestd;
typedefcharElemType;
typedefintStatus;
#defineOK1
#defineERROR0
typedefstructLnode
{
ElemTypedata;
structLnode*next;
}Lnode,*LinkList;
voidCreat_List(LinkListL)//創建單鏈表並輸入元素
{
LinkListp,q;
q=L;
charch;
cout<<"請輸入鏈表元素,並且以輸入#表示結束!"<<endl;
while(cin>>ch&&ch!='#')
{
p=newLnode[sizeof(Lnode)];
if(!p)
{
cout<<"獲取內存失敗"<<endl;
exit(ERROR);
}
p->data=ch;//尾插法
L->next=p;
L=p;
}
L->next=q;
}
voidoutput_List(LinkListL)//遍歷單鏈表(輸出單鏈表元素)
{
LinkListp;
p=L->next;
if(p==L)
{
cout<<"該鏈表是空鏈表!"<<endl;
exit(ERROR);
}
while(p!=L)
{
cout<<p->data<<"";
p=p->next;
}
}
Statusmain()
{
LinkListH;
H=(LinkList)malloc(sizeof(Lnode));
H->next=NULL;//設置頭結點為空
Creat_List(H);
output_List(H);
return0;
}//頭結點有和沒有都是可以的,頭結點只是為了讓操作鏈表更方便,