本文目錄一覽:
C語言鏈表一道題,跪求大神
//刪除所有無效數值結點的函數原型:
void deleteneg(PNODE head)
{
PNODE p,q;
p = head;
q = head;
while ( p-next != NULL )
{
if( p-next-data 0)
{
p-next = p-next-next;
p = q;
}
q = p;
p = p-next;
}
}
用C語言編程實現單鏈表的基本操作
運行結果如下:
完整代碼如下:
#includestdio.h
#includestdlib.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 == ‘\0’ || data == ‘\n’ || data == ‘\r’ || data == ‘\t’)
{
continue;
}
if(data == ‘!’)//輸入感嘆號停止插入節點
{
printf(“輸入鏈表元素結束。\n”);
break;
}
if(data = ‘A’ data = ‘Z’)
{
tNode = (LNodePtr)malloc(sizeof(LNode));
tNode-data = data; /* 數據域賦值 */
tNode-next = head-next;
head-next = tNode;
}
else
{
printf(“輸入字元需為大寫字母。\n”);
}
}
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(“\n創建的鏈表如下:\n”);
ListPrint(list);
EncryptList(list,3);
printf(“\n所有節點前移了3位之後的鏈表如下:\n”);
ListPrint(list);
printf(“\n”);
return 0;
}
如果看不懂代碼可以問我
用C語言實現對單鏈表的基本操作
#include stdio.h
#include stdlib.h
typedef int DataType;
typedef struct node {
DataType member;
struct node *next;
}*LinkList, *pNode;
// 初始化鏈表
LinkList GetEmptyList() {
LinkList head = (pNode)malloc(sizeof(struct node));
head-member = 0;
head-next = NULL;
return head;
}
// 在非增鏈表中插入結點
void InsertNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p-next != NULL; p = p-next) {
if(p-next-member = x) {
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
return;
}
}
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
}
// 新結點插入為首結點
void PushNode(LinkList head, DataType x) {
pNode p = (pNode)malloc(sizeof(struct node));
p-member = x;
p-next = head-next;
head-next = p;
}
// 刪除結點
int DeleteNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p != NULL; p = p-next) {
if(p-next-member == x) {
q = p-next;
p-next = q-next;
free(q);
return 1; // 成功刪除member(第一個)為x的結點
}
}
return 0; // 沒有找到member為x的結點
}
// 查找結點
int FindNode(LinkList head, DataType x) {
pNode p;
for(p = head-next; p != NULL; p = p-next) {
if(p-member == x) return 1; // 找到了
}
return 0; // 沒有找到
}
// 銷毀鏈表
void DestroyList(LinkList head) {
pNode q,p = head;
while(p) {
q = p;
p = q-next;
free(q);
}
head = NULL;
}
// 遍歷鏈表
void ShowList(LinkList head) {
pNode p = head-next;
while(p != NULL) {
printf(“%d “,p-member);
p = p-next;
}
printf(“\n”);
}
int main() {
DataType x,res;
LinkList head = GetEmptyList();
printf(“輸入一個整數(‘q’ to quit): “);
while(scanf(“%d”,x) == 1) {
InsertNode(head, x); // 創建非增鏈表
printf(“輸入一個整數(‘q’ to quit): “);
}
fflush(stdin);
ShowList(head);
printf(“輸入待查找的整數: “);
scanf(“%d”,x);
res = FindNode(head, x);
if(res) printf(“找到了。\n”);
else printf(“沒找到!\n”);
printf(“輸入待刪除的整數: “);
scanf(“%d”,x);
res = DeleteNode(head, x);
if(res) printf(“成功刪除。\n”);
else printf(“沒找到數據為:%d的結點!\n”,x);
ShowList(head);
DestroyList(head);
return 0;
}
原創文章,作者:BNUJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144309.html