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

c語言單鏈表代碼解析

發布時間: 2023-06-18 20:57:21

『壹』 用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;

}


如果看不懂代碼可以問我

『貳』 求C語言單鏈表 源代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct people
{
char name[10];
int age;
struct people * next;
};
int main()
{
struct people * head=NULL;
struct people * prev , * current;
int flag=1;
while(flag!=0)
{
printf("請輸入學生姓名,年齡:(年齡輸入0結束所有輸入工作) ");
current=(struct people *)malloc(sizeof(struct people));
if(head==NULL)
head=current;
else
prev->next=current;
current->next=NULL;
scanf("%s",&current->name);
scanf("%d",&current->age);
prev=current;
flag=current->age;
}
printf("Output: ");
if(head==NULL)
printf("無資料。 ");
else
{
current=head;
while(current->next!=NULL)
{
printf("姓名:%s 年齡:%d ",current->name,current->age);
current=current->next;
}
}
}


至於排序,斷開舊鏈表,將前後指針鏈接到新的節點就好

如果還有問題歡迎再問哈

『叄』 C語言鏈表原理

每個節點有一個數據域num保存該節點的數據,以及一個next域指向下一個節點的地址。假設某時刻指針p指向鏈表頭結點,通過一個循環不停地將p賦值為p指向的節點的next域的值,即該節點的下一個節點的地址,即可遍歷整個列表。

『肆』 c語言單鏈表代碼

#include<stdio.h>

#include<stdlib.h>

typedefstructnode

{

intdata;

structnode*next;

}node,*link;

linkcreate(linkhead)

{

inttemp;

linkp,q;

q=head=p=(node*)malloc(sizeof(node));

while(scanf("%d",&temp),temp)

{

p->data=temp;

if(p!=head)

{

q->next=p;

q=p;

}

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

}

q->next=NULL;

returnhead;

}

voidshow(linkhead)

{

linkp=head;

while(p)

{

printf("%d",p->data);

p=p->next;

}

}

voidmain()

{

linkhead;

head=create(head);

show(head);

}